🐙

【Flutter】initStateでasync/awaitを使いcontextまで渡す方法

2023/07/14に公開

StatefullWidgetには、画面を開いた際に最初に呼び出されるinitStateがありますよね。

しかし、initStateではasync/awaitcontextを使うことができません。

そう思っていたのですが、async/awaitしてcontextまで渡せる方法があったので、メモ程度にまとめておきます。

addPostFrameCallbackを使う


void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) async {
    final hoge = await Hoge();
    await Huga().hogeHoge(context: context, huga: huga);
  });
}

addPostFrameCallbackは、initStateが呼ばれた後に一度のみ実行されるコールバックで、ウィジェットの描画を行う際、最初の一度のみ実行したい処理を記述します。

本来、initStateの中ではBuildContextへの参照を得られませんが、addPostFrameCallback()に渡されたコールバック関数の中ではBuildContextへの参照を得られるという違いがあり、安全にcontextを呼び出せます。

Discussion