🐥

【Flutter】initStateでasync/awaitが使えなくて困った場合の対処

2023/01/16に公開

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で呼び出しましょう。

Flutter大学

Discussion