본문 바로가기

Flutter  학습

Provider

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