こんにちは。趣味グラマのNobu(@nm_aru)です。
今回もFlutterの備忘録を残しておこうと思います。
StateのFutureをreloadする(失敗例)
build内でFutureBuilderを使い、そこで使用するデータとしてFuture<List<String>>みたいな物をStatefulWidgetのStateとして保持していました。
内容は変えていますが、以下のようなソースコードです。
この状況で、FloatingActionButtonボタンを押すと、55行目で以下のエラーが発生します。
FlutterError (setState() callback argument returned a Future.
The setState() method on _ListViewWidgetState#3ce67 was called with a closure or method that returned a Future. Maybe it is marked as “async”.
Instead of performing asynchronous work inside a call to setState(), first execute the work (without updating the widget state), and then synchronously update the state inside a call to setState().)
エラーメッセージを見る限り、setState()の中で非同期のFutureを使っている事が問題のように見えます。
しかし、StateにFutureを持っているので、setStateを呼ばないとreloadされない…さてどうしたものかと色々試した結果、次のコードで無事解決しました。
StateのFutureをreloadする(成功例)
変更したのは54〜55行目になります。
要はStateのFutureに直接データを入れたあと、setState()をただ呼び出すだけです。
まとめ
この解決法がFlutter的に良いのかは分かりませんが、趣味グラマにとってはコードが動く事がまずは大事という事で、ひとまず解決して良かったです(^^)
コメント