🎃

【Riverpod学習】Providerの種類〜まとめ〜

2024/10/14に公開

Providerの種類と使用する場面について、頭がごちゃごちゃになっていたので主なものを簡単にまとめます。

1. Provider

Providerは、同期的なデータを提供するために使います。データが変わらない(例: 設定情報や定数値など)の場合に使用し、UIからアクセスできるようにします。計算結果のキャッシュを行い、パフォーマンスを向上させる効果もあります。

使用例: 設定や、アプリ全体で使用されるテーマ情報など​
https://zenn.dev/tarakosuziko/articles/eab9b2d08b854e

2. StateProvider

StateProviderは、シンプルな状態を管理するために使います。数値や文字列、ブール値などを管理し、UIが直接その値を変更する場面で使用します。ドロップダウンメニューやチェックボックス、ページネーション、数値入力など、シンプルなUI操作に基づいて変わる状態を管理する際に使われます。

使用例: カウンターの状態管理や、フォームの値の管理​、ドロップダウンメニュー、チェックボックス、ページネーションなどシンプルなUI操作に基づいて変わる状態を管理する場合
https://zenn.dev/tarakosuziko/articles/7631b469cbbc3a

3. (Async)NotifierProvider

NotifierProviderとAsyncNotifierProviderは、Riverpodで状態管理を行うための仕組みです。この2つは、それぞれ同期的・非同期的にデータを扱うために使います。

StateNotifierProviderというプロバイダも存在しますが、現在はStateNotifierProviderよりもNotifierProviderを使うことが推奨されています。NotifierProviderの基本的な動作はStateNotifierProviderとほぼ同じですが、より簡単で新しいAPIです。

使用例:

  • NotifierProvider:同期的な状態管理に使用し、アプリ内のビジネスロジックを一元化したい場合(Todoリストのように、タスクの追加・削除や状態変更を行う場面など​)
  • AsyncNotifierProvider:インターネット経由で外部からデータを取得や更新したい場合

https://zenn.dev/tarakosuziko/articles/090b5d8dd54d1b

4. FutureProvider

FutureProviderは、非同期処理を扱うために使用します。ネットワークリクエストやデータベースからのデータ取得のように、処理が完了するまで待機する必要がある場合に最適です。
状態に応じたUIの表示(エラー、読み込み中、データ完了)が簡単に行えるため、非同期処理を扱う際に便利です。
非同期処理の結果を取得するだけでいいときはFutureProvider、ユーザー操作に応じて状態を動的に変えたいときはAsyncNotifierProviderで使い分けると良さそうです

使用例: APIからのデータ取得や、ファイルの読み込み​

https://zenn.dev/tarakosuziko/articles/05aabde4983332

5. StreamProvider

StreamProviderは、リアルタイムでデータを受信する場合に使用します。WebSocketのチャットや、Firebaseのリアルタイムデータのように、継続的なデータ更新が必要な場合に便利です。これは、FutureProviderと似ていますが、Streamの更新が繰り返し行われる点で異なります。データが定期的に更新されたり、リアルタイムで変化する場合に利用されます。

使用例: ライブチャットや、リアルタイム通知の管理​
https://zenn.dev/tarakosuziko/articles/53cb8efcc52acd

6. ChangeNotifierProvider

ChangeNotifierProviderは、可変の状態を管理するために使いますが、Riverpodでは推奨されていません。FlutterのChangeNotifierに依存し、状態を変更するたびにリスナーに通知します。使う場合は、既存のChangeNotifierベースのコードを簡単に移行したいときに適しています。

使用例: 既存のChangeNotifierを移行して使う場合​
https://zenn.dev/tarakosuziko/articles/dcec9e62b22b56

Discussion