DEV/flutter (dart)
Flutter ChangeNotifier / MultiProvider Provider
석봉
2023. 2. 13. 16:15
시작하기 전, provider를 Pub get 해주어야 함
* pubspec.yaml 확인
// 예시
dependencies:
provider: ^6.0.1
1. 선언방법
1.1. 우선 ChangeNotifier을 선언
class Store extends ChangeNotifier {
var name = 'sibong';
changeName() {
name = 'seokbong';
notifyListeners(); // re-rendering 해주세요.
}
}
1.2. 위 Store 내부의 변수 및 함수를 사용할 위젯을 ChangeNotifierProvider로 감싸줌
void main() {
// MaterialApp 내의 모든 위젯에서 사용하기 위해 ChangeNotifierProvider로 감싸줌
// create는 필수값이며 매개변수로 context를 넣어주어야함(c)
// create로 Store 클래스를 지정
// child에 MaterialApp을 지정 (그냥 Store를 쓸 앱을 감싸준다고 생각하면 된다)
runApp(
ChangeNotifierProvider(
create: (c) => Store(),
child: MaterialApp(
theme: style.theme,
home: const MyApp(),
),
)
);
}
2. 사용방법
// 변수 사용방법
context.watch<Store>().name
// 함수 사용방법
context.read<Store>().changeName();
* 보너스 : 여러 Provider를 사용하고 싶은 경우.
void main() {
runApp(
// 여러개를 등록하겠다!
MultiProvider(
providers: [
// Store와 subStore를 등록!
ChangeNotifierProvider(create: (c) => Store()),
ChangeNotifierProvider(create: (c) => subStore()),
],
child: MaterialApp(
theme: style.theme,
home: const MyApp(),
),
)
);
}
...(대충 코드)
// 사용법은 동일함!