Chapter 15

[v0.14.0以下版] ProviderListenerでProviderを監視する

村松龍之介
村松龍之介
2023.02.12に更新
このチャプターの目次

ProviderListener Widget とは

ボタンを押したときに画面遷移させたりダイアログを表示させるのはよくある動作ですね。

ではProviderの状態が変更されたとき、その変更を検知してWidgetツリー上で画面遷移やダイアログを表示させるにはどうしたら良いでしょう?

ProviderListenerで、Providerの監視とそのハンドリングが可能です。

具体的な使用例は以下の通りです。

top_page.dart

Widget build(BuildContext context) {
  // ProviderListerでWidgetを囲みます。<>にはProviderの型を記述します
  // ここでは、 `int` をstateとして持つ `StateProvider` を指定
  return ProviderListener<StateProvider<int>>(
    // 監視したいProviderを指定します
    provider: counterProvider,
    // 監視対象のProviderの状態が変更されたとき、 `onChange` が実行されます
    onChange: (context, counter) {
      // `counterProvider` の状態が `5` になったとき、ダイアログを表示します
      if (counter.state == 5) {
        showDialog(...);
      }
    },
    child: Scaffold(
        ...
    ),
  );
}

参考リンク

ProviderListener | Riverpod
https://riverpod.dev/docs/concepts/reading#providerlistener