【Riverpod学習】Providerの種類〜まとめ〜
Providerの種類と使用する場面について、頭がごちゃごちゃになっていたので主なものを簡単にまとめます。
1. Provider
Providerは、同期的なデータを提供するために使います。データが変わらない(例: 設定情報や定数値など)の場合に使用し、UIからアクセスできるようにします。計算結果のキャッシュを行い、パフォーマンスを向上させる効果もあります。
使用例: 設定や、アプリ全体で使用されるテーマ情報など
2. StateProvider
StateProviderは、シンプルな状態を管理するために使います。数値や文字列、ブール値などを管理し、UIが直接その値を変更する場面で使用します。ドロップダウンメニューやチェックボックス、ページネーション、数値入力など、シンプルなUI操作に基づいて変わる状態を管理する際に使われます。
使用例: カウンターの状態管理や、フォームの値の管理、ドロップダウンメニュー、チェックボックス、ページネーションなどシンプルなUI操作に基づいて変わる状態を管理する場合
3. (Async)NotifierProvider
NotifierProviderとAsyncNotifierProviderは、Riverpodで状態管理を行うための仕組みです。この2つは、それぞれ同期的・非同期的にデータを扱うために使います。
StateNotifierProviderというプロバイダも存在しますが、現在はStateNotifierProviderよりもNotifierProviderを使うことが推奨されています。NotifierProviderの基本的な動作はStateNotifierProviderとほぼ同じですが、より簡単で新しいAPIです。
使用例:
- NotifierProvider:同期的な状態管理に使用し、アプリ内のビジネスロジックを一元化したい場合(Todoリストのように、タスクの追加・削除や状態変更を行う場面など)
- AsyncNotifierProvider:インターネット経由で外部からデータを取得や更新したい場合
4. FutureProvider
FutureProviderは、非同期処理を扱うために使用します。ネットワークリクエストやデータベースからのデータ取得のように、処理が完了するまで待機する必要がある場合に最適です。
状態に応じたUIの表示(エラー、読み込み中、データ完了)が簡単に行えるため、非同期処理を扱う際に便利です。
非同期処理の結果を取得するだけでいいときはFutureProvider、ユーザー操作に応じて状態を動的に変えたいときはAsyncNotifierProviderで使い分けると良さそうです
使用例: APIからのデータ取得や、ファイルの読み込み
5. StreamProvider
StreamProviderは、リアルタイムでデータを受信する場合に使用します。WebSocketのチャットや、Firebaseのリアルタイムデータのように、継続的なデータ更新が必要な場合に便利です。これは、FutureProviderと似ていますが、Streamの更新が繰り返し行われる点で異なります。データが定期的に更新されたり、リアルタイムで変化する場合に利用されます。
使用例: ライブチャットや、リアルタイム通知の管理
6. ChangeNotifierProvider
ChangeNotifierProviderは、可変の状態を管理するために使いますが、Riverpodでは推奨されていません。FlutterのChangeNotifierに依存し、状態を変更するたびにリスナーに通知します。使う場合は、既存のChangeNotifierベースのコードを簡単に移行したいときに適しています。
使用例: 既存のChangeNotifierを移行して使う場合
Discussion