굿즈 <-> 위시 모드 변경하기
굿즈 추가 페이지의 상단을 보면, [GoodsList | WishList] 버튼이 있습니다.
굿즈 추가 페이지를 통해, GoodsList와 WishList를 작성할 수 있는 기능을 구현하기 위해 이 버튼을 만들었습니다.
버튼을 누르면 GoodsListProvider와 연결되어서 굿즈 정보를 추가하거나, WishListProvider와 연결되어서 위시 정보를 추가할 수 있게 만드는 것이 목표입니다.
AddGoodsPage의 코드 분석
import 'package:flutter/material.dart';
import 'package:goodwishes/constants/ui_numbers.dart';
import 'package:goodwishes/widgets/goods/add_goods_list.dart';
import 'package:goodwishes/widgets/wish/add_wish_list.dart';
import 'package:goodwishes/widgets/change_goods_wish_button.dart';
import 'package:goodwishes/widgets/top_with_profile.dart';
class AddGoodsPage extends StatefulWidget {
const AddGoodsPage({
super.key,
});
@override
State<AddGoodsPage> createState() => _AddGoodsPageState();
}
class _AddGoodsPageState extends State<AddGoodsPage> {
bool isGoods = true;
@override
Widget build(BuildContext context) {
void isGoodsChangeHandler() {
setState(() {
isGoods = !isGoods;
});
}
return SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: UIDefault.pageHorizontalPadding),
child: TopWithProfile(title: isGoods ? 'Add Goods' : 'Add Wish'),
),
const SizedBox(
height: UIDefault.sizedBoxHeight,
),
ChangeGoodsWishButton(
isGoods: isGoods,
onClick: isGoodsChangeHandler,
),
const SizedBox(
height: UIDefault.sizedBoxHeight,
),
isGoods ? const AddGoodsList() : const AddWishList(),
],
),
);
}
}
위 코드가 굿즈 추가 페이지의 코드인데, StatefulWidget으로 제작되었습니다.
그리고 isGoods라는 state와, 이 state를 변경하기 위한 handler 함수가 있습니다.
isGoods가 true(기본값)일 경우 AddGoodsList
isGoods가 false일 경우 AddWishList가 출력되는 구조입니다.
굿즈와 위시는 각각 다른 정보를 입력받도록 되어 있습니다.
버튼을 누르면, 자동으로 각 스타일에 맞는 Input 위젯들이 출력됩니다.
ChangeGoodsWishButton의 코드 분석
ChangeGoodsWishButton(
isGoods: isGoods,
onClick: isGoodsChangeHandler,
),
굿즈와 위시모드를 설정해주는 버튼은 'ChangeGoodsWishButton'이라는 커스텀 위젯입니다.
isGoods state와, isGoods의 값을 변경해주는 handler 함수를 onClick 속성으로 전달받습니다.
import 'package:flutter/material.dart';
import 'package:goodwishes/constants/ui_numbers.dart';
class ChangeGoodsWishButton extends StatelessWidget {
final bool isGoods;
final Function onClick;
const ChangeGoodsWishButton({
super.key,
required this.isGoods,
required this.onClick,
});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
onClick();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GoodsButton(
isGoods: isGoods,
),
WishButton(
isGoods: isGoods,
),
],
),
);
}
}
class GoodsButton extends StatelessWidget {
final bool isGoods;
const GoodsButton({
super.key,
required this.isGoods,
});
@override
Widget build(BuildContext context) {
return Container(
height: 30,
width: 100,
decoration: BoxDecoration(
color: isGoods ? UIDefault.activeColor : UIDefault.inactiveColor,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(5),
bottomLeft: Radius.circular(5),
bottomRight: Radius.circular(0),
topRight: Radius.circular(0),
),
),
child: const Center(
child: Text(
'GoodsList',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
);
}
}
class WishButton extends StatelessWidget {
final bool isGoods;
const WishButton({
super.key,
required this.isGoods,
});
@override
Widget build(BuildContext context) {
return Container(
height: 30,
width: 100,
decoration: BoxDecoration(
color: isGoods ? UIDefault.inactiveColor : UIDefault.activeColor,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(0),
bottomLeft: Radius.circular(0),
bottomRight: Radius.circular(5),
topRight: Radius.circular(5),
),
),
child: const Center(
child: Text(
'WishList',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Color(0xAA000000),
),
),
),
);
}
}
ChangeGoodsWishButton의 코드 전문입니다.
ChangeGoodsWishButton은 GoodsButton과 WishButton이라는 자식 위젯을 받습니다.
각 버튼은 isGoods의 값에 따라, 버튼의 색상이 달라집니다.
borderRadius 속성도 각 버튼의 위치에 따라 다르게 적용한 모습입니다.
끝.
'개발일지 > GoodWishes' 카테고리의 다른 글
[굿위시 제작기] 13. 즐겨찾기 페이지 제작하기 (3) | 2024.11.05 |
---|---|
[굿위시 제작기] 12. 굿즈 검색 페이지 제작하기 (0) | 2024.11.03 |
[굿위시 제작기] 10. 굿즈 추가 페이지 제작과정 - TextInput 그리고 굿즈 등록 버튼 (1) | 2024.10.19 |
[굿위시 제작기] 9. 굿즈 추가 페이지 제작과정 - 카테고리 설정/관리 페이지 (1) | 2024.10.19 |
[굿위시 제작기] 8. 굿즈 추가 페이지 제작과정 - DatePicker 사용하기 (0) | 2024.10.17 |