[Flutter] Provier 사용하기
Provider 생성
먼저 Provider 패키지를 pubspec.yaml 파일에 추가한다.
그 다음 전역 상태 클래스 파일을 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
import 'package:flutter/material.dart';
class MyState with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
Provier 적용
main.dart 파일에서 메인 앱을 ChangeNotifierProvider()
로 감싸고 child 속성에 넣는다.
1
2
3
4
5
6
7
8
9
10
11
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
ChangeNotifierProvider(
create: (_) => MyState(),
child: MyApp(),
),
);
}
전역 상태 가져오기
Provider.of<MyState>(context)
를 통해 전역 상태를 가져올 수 있다.
해당 코드는 build()
메서드 내부에서 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final myState = Provider.of<MyState>(context);
return Scaffold(
appBar: AppBar(
title: Text('My Home Page'),
),
body: Center(
child: Text('Count: ${myState.count}'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => myState.increment(),
child: Icon(Icons.add),
),
);
}
}
Provider를 initState()
메서드 안에서 호출하면 위젯 트리가 아직 완전히 구성되기 전이라 에러가 발생하므로 addPostFrameCallback()
메서드 안에서 사용해야 한다.
1
2
3
4
5
6
7
void initState() {
super.initState();
WidgetsBinding.instance?.addPostFrameCallback((_) {
final myState = Provider.of<MyState>(context);
// 여기서 myState 사용
});
}
This post is licensed under CC BY 4.0 by the author.