🐥
【Flutter】initStateでasync/awaitが使えなくて困った場合の対処
StatefullWidgetには、画面を開いた際に最初に呼び出されるinitStateがあります。ここにFuture型を戻り値とした関数を入れたいのに、エラーが出て困る時ってありませんか?
エラーが出るケース
例えばこんなケースです。
class _MyAppState extends State<MyApp> {
void initState() async {
super.initState();
final hogehoge = await Hogehoge() // これだとエラーになる
}
エラーの原因ですが、initStateではasyncが使えないからです。
一度Futureに入れよう
そんな時は、Futureを戻り値とした別の関数内で処理してから、initStateに入れてあげましょう。
class _MyAppState extends State<MyApp> {
void initState() {
super.initState();
initialize() //これならエラーが起きない
}
Future<void> initialize() async {
await Hogehoge();
}
まとめ
initStateではasync/awaitは使えません。一度Future型の別の関数で処理してから、initStateで呼び出しましょう。
Discussion