🐙
【Flutter】initStateでasync/awaitを使いcontextまで渡す方法
StatefullWidgetには、画面を開いた際に最初に呼び出されるinitStateがありますよね。
しかし、initStateではasync/awaitやcontextを使うことができません。
そう思っていたのですが、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