【Flutter】Riverpodのref.watchの理解と実装例

Flutter状態管理

FlutterとRiverpodを使っていてref.watchを使うのが基本だと思います。
基礎を理解し、他に展開したり有効に活用できればアプリ開発も円滑になると思い「ref.watchについて」「ref.readとの違い」「簡単な実装例」をまとめました。

Riverpodについて深掘りたい方や基礎を学びたい方の参考になれば幸いです。

Riverpodとref.watchについて

rivevpodとは

  • 状態管理ライブラリ
  • flutterの中でも人気のライブラリ
  • 1対1に相性の良いStatefulWidgetやFlutter Hooksに対して1対多の管理に強い

ref.watchとは

  • Providerの状態を管理して、変化があれば通知する関数
  • Providerはアプリの状態を管理して必要な場所でアクセスする仕組み
  • これを使って色々な状態をいろんなファイルで管理が可能

    ref.watchとref.readとの違い

    ref.watchと同じく頻繁に利用するref.readとの違いについても見てみましょう。

    各特徴は以下の通りです。

    ref.watch の特徴

    • リアクティブに動く → プロバイダの値が変更されたときに 再ビルドが発生 する。
    • 主に build メソッド内で使用WidgetRef ref を使って Widget 内でプロバイダの状態を監視する。
    • 用途: UI を最新の状態に保ちたいとき
    Widget build(BuildContext context, WidgetRef ref) {
      final counter = ref.watch(counterProvider);
      return Text('$counter');
    }

    ref.read の特徴

    • 非リアクティブ → 値を「1回だけ」取得。プロバイダが更新されても自動で再ビルドはしない。
    • イベントハンドラなど、UI の外で使用するのに適している
      • 例えば、ボタンを押したときに状態を変更したい場合など。
    • 用途: 状態の変更や、一度だけ値を取り出したいとき
    ElevatedButton(
      onPressed: () {
        ref.read(counterProvider.notifier).state++;
      },
      child: Text('Increment'),
    );

    比較まとめ

    まとめると、イベントやコールバックで要所要所で使うreadとbuildでしっかり管理するwatchようなイメージです。

    機能ref.watchref.read
    再ビルドあり(値が変わると)
    主な用途UIで状態を表示・監視値の取得や状態の更新(副作用)
    使用場所build()イベント・コールバックなど

    ref.watchの使用例

    下記記事にてref.watchの基本的な動きが確認できると思います。
    内容としては、以下の通りです。

    • State Providerでカウントアップの数字の状態を管理
    • ref.watchでカウントの状態を監視
    • ref.readを使ってカウントアップをフォロー

    最後に

    基本的なref.watchの使い方はいかがでしたでしょうか。ref.refreshなど応用ケースなども今後まとめて解説できればと思いますのでよかったらそちらもご覧ください。

    Flutter×Riverpodを使用している方に今回の記事が参考になることを願っています。

    ではまた。

    コメント

    タイトルとURLをコピーしました