やりたいこと
タイトルの通り、StatelessWidget
で全ての Widget
のビルドが終わったタイミングで処理を実行したかった。
build()
内で Provider
の初期化処理を書こうとしたが、初期化済を表すフラグをビルド中に変更しようとしたら setState() or markNeedsBuild() called during build.
というエラーが発生したのでどうしようとなっていた。
結論
WidgetsBinding.instance.addPostFrameCallback
を使用する。
class ExampleWidget extends StatelessWidget {
const ExampleWidget({super.key});
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) {
print('全てのウィジェットのビルドが終わったタイミングで実行したい処理を記述');
});
return Scaffold(
// ...
);
}
}
これを使用することで、build()
内で
-
Provider
の初期化済フラグがfalse
なら初期化処理 - 初期化処理完了後、全てのウィジェットのビルドが終わったら初期化済フラグを
true
に変える
ことができ、エラーを回避することができた!
感想
見つかってよかった…。助かった。
何か間違っていること等あればコメントください。
参考にした情報
FlutterでsetState() or markNeedsBuild() called during buildエラーが発生した場合のトラブルシューティング