🐙
【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