70
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutterのwidgetについて、build完了直後コールバックが欲しい時に使えるやつ

Last updated at Posted at 2019-12-03

#結論

WidgetsBinding.instance.addPostFrameCallback((_) => ここに関数とか処理置けば良い);

Flutterの1.8.4から実装された機能らしいです。
逆に何でそれまでは無かったんですかね、ってぐらい有り難い。

引用元:
https://stackoverflow.com/questions/49466556/flutter-run-method-on-widget-build-complete

##何でこれが必要になったかの事例メモ
http.post() 通信で受け取ったJSONデータで
UIに表示する内容を変えるタイプの画面を作成する形のアプリを作っている。
普通に表示するだけならまぁ、FutureBuilderで全部作っちゃえば良い。
ところが、追加仕様が発生した。

仕様1. 有効期限付きのセッショントークンを通信ごとにサーバーから発行
仕様2. トークンが有効期限切れだったら、どの画面の通信でもかならずログイン画面に戻す

この段階でFutureBuilderは使えないことが確定した。
FutureBuilderの builder 内で Navigator の関数を使うとエラーになるのである。
仕様2.に対応するには、異常系の時に必ず Navigator.pushAndRemoveUntil を実行する必要がある。

というわけで、こういう実装にした。
今の所ちゃんと動いたので、これでいいと思う。多分。

  1. 通信時に、ローディング表示用Widgetを追加表示
  2. ↑のWidgetにて、WidgetsBinding.instance.addPostFrameCallback で future を実行
  3. future 完了結果を取得
  4. 正常系、異常系それぞれで Navigator を使って別画面に遷移する
70
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?