WHAT IS IT?
Flutter에서 상태 관리를 하기 위한 여러 라이브러리 중, Provider는 단순하고 가볍게 상태 관리를 할 수 있도록 도와주는 라이브러리 중 하나입니다.
Provider 라이브러리의 장점
•
단순함: Provider는 다른 상태관리 라이브러리들보다 훨씬 가볍고 단순하다.
•
성능: Provider는 Flutter의 내장 상태관리 라이브러리인 setState() 메서드보다 빠르다.
•
테스트 용이성: Provider는 의존성 주입(Dependency Injection)을 사용하기 때문에, 테스트를 용이하게 할 수 있다.
•
확장성: Provider는 매우 유연합니다. 이 라이브러리를 사용하면 상태관리를 위한 여러 패턴들을 쉽게 구현할 수 있습니다.
setState() 의 동작 방식
1.
setState() 호출
2.
stateFult Widget 에게 상태가 변경되었음을 위로 계속 전파함
3.
StateFul Widget 이 갖고 있는 위젯을 전부 리빌드함
단점
•
너무 많은 보일러플레이트 코드
•
불필요한 리빌드
Provider 라이브러리의 동작 방식
1.
setState() 호출
2.
Provider 에게 상태가 업데이트 되었음을 바로 알림
3.
Provider 인스턴스가 Listener 들을 업데이트함
HOW TO USE
0. Provider 에 사용할 커스텀 클래스를 정의한다. (with ChangeNotifier)
class MyModel with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners(); // 리스너에게 상태가 업데이트 되었음을 알림.
}
}
Dart
복사
1. 상태에 접근해야 하는 위젯 트리를 Provider 안에 넣는다.
Provider(
create: (_) => MyModel(),
child: ...
)
Dart
복사
2. Listener 로 등록하기
final provider = Provider.of<ProviderInterface>(context);
Dart
복사
위 코드를 빌드 메서드 안에 사용해서 해당 위젯을 Provider 의 리스너로 등록한다. (상태 변경시 재빌드 됨)
class MyHomePage extends StatelessWidget {
build(context) {
final provider = Provider.of<MyModel>(context);
return ...
}
}
Dart
복사
이렇게 위젯을 통째로 리스너로 등록하면 리스너의 하위 위젯들이 전부 재빌드 된다.
물론 Flutter 의 성능이 많이 올라와서 신경을 쓰지 않아도 되나, 더 효율적인 재빌드를 원한다면 Consumer 위젯을 사용하면된다.