0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FlutterのStatelessWidgetで全てのウィジェットのビルドが終わったタイミングで処理を実行する方法

Posted at

やりたいこと

タイトルの通り、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() 内で

  1. Provider の初期化済フラグが false なら初期化処理
  2. 初期化処理完了後、全てのウィジェットのビルドが終わったら初期化済フラグを true に変える

ことができ、エラーを回避することができた!

感想

見つかってよかった…。助かった。
何か間違っていること等あればコメントください。

参考にした情報

FlutterでsetState() or markNeedsBuild() called during buildエラーが発生した場合のトラブルシューティング

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?