LoginSignup
5
2

More than 5 years have passed since last update.

Flutter でネイティブ画面から戻った直後に Navigator を使うと固まる?

Last updated at Posted at 2018-03-19

Flutter でアプリを開発していて、プラットフォーム・ネイティブの画面を使うことがあります。たとえば画像ピッカーだったり、WebViewだったり、Twitterなどのソーシャル連携だったりです。

ネイティブの画面から戻ったあとで、その結果を使って何らかの画面遷移をしたい場合がありますが、即座に Navigator を操作すると、問題が発生することがあります。

Issue にあるように、以下のようなワークアラウンドで回避することができます。

var imageFile = await ImagePicker.pickImage();
await new Future.delayed(new Duration(milliseconds: 100));
Navigator.of(...).push(...)

なお、時間を待つ実装がダサくて嫌だという場合は WidgetsBindingObserver を使って、Flutter 画面が前面にいる AppLifecycleState.resumed 状態になることを待ってから遷移すれば OK です。

いわゆる「処理中」のダイアログの表示で、その処理がアプリがバックグラウンドにいる間に終わると、上記の Issue に関連してダイアログが閉じないという問題に遭遇したのでライブラリを作りました。

ダイアログについてはこのライブラリを利用できます。ダイアログ以外の画面遷移では、これの内部の実装を参考に WidgetsBindingObserver を使って状態待ちすればいけると思います。

5
2
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
5
2