【Flutter】StateError (Bad state: No ProviderScope found) と怒られた時の対応

【Flutter】StateError (Bad state: No ProviderScope found) と怒られた時の対応

昨今トレンド(と思われる)の Riverpod + Hooks + StateNotifier での状態管理導入時に表題のエラーが発生しました。

「ProviderScope が見つからない」と言われている通り、アプリケーションを ProviderScope で括らなければいけなかったようです。

// NG
void main() {
  runApp(const MyApp());
}

// OK
void main() {
  runApp(const ProviderScope(child: MyApp()));
}

新しく Flutter プロジェクトを作ったときなど結構忘れがちです。

Widget Test を行う時も同様なので注意が必要です!

ちなみに、WidgetRef で Provider を参照するところが Widget ツリー上 ProviderScope 配下になっていればいいので、一部だけ Riverpod で実装したい時などは、上記で言う MyApp 全体を括る必要はありません(そういった使い方はあまりお勧めできませんが)。