【Flutter】StateにFutureを持たせた時のreload方法

Flutter

こんにちは。趣味グラマの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的に良いのかは分かりませんが、趣味グラマにとってはコードが動く事がまずは大事という事で、ひとまず解決して良かったです(^^)

コメント

タイトルとURLをコピーしました