Provider를 이용하면 전역적인 상태가 변화되었다라는걸 공유할수 있다.
1. 먼저 pubspec.yaml에 provider 설치
dependencies:
flutter:
sdk: flutter
provider: ^4.0.0
https://pub.dev/packages/provider/install
2. 전역적으로 사용하려는 데이터 class에 with ChangeNotifier 추가
class GreatPlaces with ChangeNotifier {
... 생략 ...
Future<void> fetchAndSetPlaces() async {
... 생략 ...
notifyListeners();
}
}
데이터가 바뀌었을 경우 notifyListeners()를 추가 시켜줘야 한다.
3. 공통 부모 위젯 부분에 ChangeNotifierProvider.value 추가.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: GreatPlaces(),
child: MaterialApp(
... 생략 ...
),
);
}
}
4. 사용하려는 곳에 불러서 사용 가능.
Provider.of<GreatPlaces>(context, listen: false).fetchAndSetPlaces()
listen같은 경우 상태 변경만 할 뿐 해당 위젯을 다시 빌드할 필요 없을 경우 false, 위젯을 다시 빌드해야 한다면 true