개요
Provider는 플러터 전역 상태 관리를 위한 아키텍처 라이브러리 중 하나입니다.
- 플러터 생태계에서 아키텍처를 라이브러리 형태로 만들어 사용하는 게 일반적
- Provider는 인기있는 아키텍처 라이브러리 중 하나로, ChangeNotifier ChangeNotifierProvider Consumer 세 가지 개념을 사용
ChangeNotifier
상태 변화에 대한 알림을 제공하는 클래스
- 특정 클래스가 ChangeNotifier 클래스이면 NotifyListener를 통해 외부에서 특정 클래스의 상태 변화에 대해 인지
- 이를 활용해서 유닛 테스팅 또한 쉽게 가능
class CartModel extends ChangeNotifier {
List<Item> _items = [];
void add(Item item) {
_items.add(item);
// 외부의 리스너들에게 상태 변화를 알려준다
notifyListeners();
}
void removeAll() {
_items.clear();
// 외부의 리스너들에게 상태 변화를 알려준다
notifyListeners();
}
}
ChangeNotifierProvider
자식들에게 ChangeNotifier를 전달하는 위젯입니다. 한번에 여러 ChangeNotifer를 전달해야 하는 경우 (대부분 그럴 겁니다.) 아래와 같이 MultiProvider를 사용하면 됩니다.
void main() {
runApp(
// 이렇게 MultiProvider 위젯으로 ChangeNotifierProvider와 Provider ChangeNotifier를 전달
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => CartModel()),
Provider(create: (context) => SomeOtherClass()),
],
child: const MyApp(),
),
);
}
Consumer
내용물이 변경되는 위젯이 Consumer, 소비자입니다.
return HumongousWidget(
// ...
child: AnotherMonstrousWidget(
// ...
// 중요한 점은, 변경되는 내용물과 가장 가까운 부모가 Consumer임을 알려주는 것
child: Consumer<CartModel>(
builder: (context, cart, child) {
return Text('Total price: ${cart.totalPrice}');
},
),
),
);
참고 자료
'프로그래밍 > Flutter <Dart>' 카테고리의 다른 글
[Flutter] bottomNavigationBar svg 커스텀 아이콘 selectedIconTheme 적용하기 (0) | 2023.12.16 |
---|---|
[Dart] Effective Dart 스타일 가이드 요약 (0) | 2023.10.12 |
[Dart] Dynamic Type에 대한 이해 (0) | 2023.09.22 |
[Flutter] 오래된 플러터 프로젝트 수정 시 발생할 수 있는 에러 (0) | 2023.09.16 |
[Flutter] MacOS M1 실리콘에 플러터 개발 환경 설정하기 (0) | 2023.09.08 |