Search
🤾🏻

Provider

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 위젯을 사용하면된다.

Consumer 위젯

REFERENCE