このチャプターの目次
前章では、「Riverpodの使い方」を解説しました。
RiverpodのProviderには以下のように複数種類あり、適材適所で使い分ける必要があります。
- Provider
最も基本的なProvider - StateProvider
外部から変更可能な状態を提供する - StateNotifierProvider
外部から変更可能な状態と、状態操作メソッドクラスを提供する - FutureProvider
非同期で取得した値を提供する - StreamProvider
断続的に最新の値を提供する - ScopedProvider
特定の範囲に絞った利用ができるProvider - ChangeNotifierProvider
外部から変更可能な状態と、状態操作メソッドクラスを提供する
この章ではまず、Providerのみを解説します。
それ以外のProviderについては次章以降で一つずつ解説して参ります。
Provider - 最も基本的なProvider
(外部からは)変更できない値を公開できる基本的なProviderです。
// Providerの定数をグローバルに宣言
final appNameProvider = Provider((ref) => 'My TODO');
// 〜中略〜 buildメソッド
Widget build(BuildContext context, ScopedReader watch) {
// Providerを読み取る。
final appName = watch(appNameProvider);
return Scaffold(
// Providerの値を使用して表示
appBar: AppBar(title: Text(appName)),
body: ListView(
children: [
...省略
],
),
);
}
内部からは変更でき、 watch
していれば、その変更は再構築を促します。
final counterProvider = StateProvider((ref) => 0);
final previousCounterProvider = Provider((ref) {
final counter = ref.watch(counterProvider).state;
return counter - 1;
});
// 〜中略〜 buildメソッド
Widget build(BuildContext context, ScopedReader watch) {
// previousCounterProvider を読み取る。
// counterProvider の状態が更新されると previousCounterProvider も変更され、再構築される。
final previousCount = watch(previousCounterProvider).state;
return Scaffold(
// previousCounterProvider の値を表示
body: Text('前回の値:$previousCount'),
);
}