티스토리 뷰
반응형
Provider를 사용하여 등록된 상태에 접근하는 방법은 다양합니다. 가장 일반적으로 사용되는 방법들에 대해서 알아봅시다.
Provider.of<T>(context)
Provider.of<T>(context)
를 사용하면 등록된T
타입의 객체 또는 상태에 접근할 수 있습니다.- 이 방법은 가장 간단하고 직접적인 방법이며, 위젯 트리에서 가장 가까운 상위
Provider<T>
를 찾습니다. - 기본적으로 리스닝 동작이 활성화되어 있으며, ChangeNotifierProvider의 상태 데이터 변경되거나 setState()로 상태 데이터가 변경되면, 해당 위젯이 리빌드 됩니다.
- 예시:
var myData = Provider.of<MyDataProvider>(context);
context.read<T>()
:context.read<T>()
를 사용하여 등록된T
타입의 객체 또는 상태를 읽을 수 있습니다.- 이 방법은 데이터를 읽기만 하고 리스너를 등록하지 않습니다.
- 예시:
var myData = context.read<MyDataProvider>();
Consumer<T>
위젯:Consumer<T>
위젯은T
타입의 상태에 접근하고 해당 데이터에 대한 리스너를 등록할 수 있습니다.Consumer
는 자식 위젯을 빌드하는 콜백을 가지고 있으며, 해당 콜백은 데이터 변경 시에만 호출됩니다.- 이 방법은 T 타입의 상태가 변경될 때 builder가 호출되어 하위 위젯을 리빌드 합니다. 그 외에 위젯의 불필요한 리빌드를 방지하여 성능을 높일 수 있습니다.
- 예시:
Consumer<MyDataProvider>( builder: (context, myData, child) { // myData를 사용하여 위젯을 빌드합니다. return Text(myData.someValue.toString()); }, )
Selector<T, R>
위젯:Selector<T, R>
위젯은 데이터 선택 로직을 제공하여 필요한 데이터만 리스닝할 수 있도록 합니다.R
은 선택한 상태의 타입이며,T
를 기반으로 리스닝할 데이터를 추출합니다.- 예시:
Selector<MyDataProvider, int>( selector: (context, myData) => myData.someValue, builder: (context, value, child) { // selector에서 선택한 myData.someValue가 변경될 때만 builder가 호출됩니다. return Text(value.toString()); }, )
위의 방법들은 Provider를 사용하여 등록된 상태에 접근하는 일반적인 방법들입니다. 선택할 때는 상황과 요구사항에 따라 가장 적합한 방법을 선택하면 됩니다.
반응형
'Flutter > 상태 관리' 카테고리의 다른 글
플러터] Provider - ChangeNotifierProxyProvider 클래스 (0) | 2024.07.01 |
---|---|
플러터] Provider - ChangeNotifierProvider 클래스 (0) | 2024.07.01 |
플러터] ChangeNotifierProvider와 Selector, Navigator 예제 코드 (0) | 2023.07.12 |
플러터] Provider의 Selector (0) | 2023.07.12 |
플러터] Provider의 Consumer (0) | 2023.07.12 |
댓글
공지사항