Flutterで画面遷移を検知する
by
kuwapp
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Flutterで画面遷移を検知する Flutter Meetup Tokyo #1
Slide 2
Slide 2 text
About Me ● @kuwapp_dev / Yusuke Hata ● モイ株式会社 ● Androidエンジニア ● Flutter は alpha のときに二ヶ月程 ● メイド喫茶駆動開発
Slide 3
Slide 3 text
画面遷移を検知できれば... 以下のようなケースに対応できる!!!! 1. 別画面に遷移したら非同期処理停止したい 2. 画面閉じる前に大事なデータ保存しておきたい 3. 画面に戻ったら最新のデータ読み込みたい
Slide 4
Slide 4 text
Flutter の画面遷移方法 ● Navigator.pushNamed(context, “/detail”); ○ 別画面へ遷移する ● Navigator.pop(context); ○ 別画面から戻る(今いる画面を pop する)
Slide 5
Slide 5 text
どうやって検知しよう??
Slide 6
Slide 6 text
ベタ書きする?? 画面遷移する処理の上にベタ書きする
Slide 7
Slide 7 text
(ヾノ・∀・`)ナイナイ
Slide 8
Slide 8 text
ベタ書きすると ● Navigator.push の呼び出し時に必ず書く必要がある ● 書き忘れが生じるかもしれない バグのもと!!
Slide 9
Slide 9 text
画面遷移をいい感じに検知する仕 組みはないのか??
Slide 10
Slide 10 text
そこで RouteObserver
Slide 11
Slide 11 text
RouteObserver RouteObserver に登録しておけば、画面遷移時(push pop時)に登録しておいたリス ナーを呼び出してくれる!!
Slide 12
Slide 12 text
RouteObserver 準備 インスタンスを生 成 navigatorObser versに登録
Slide 13
Slide 13 text
RouteObserver イベントの購読 ● routeObserver.subscribe(this,ModalRoute.of(context)); ○ push、popのイベントを購読する。 ● routeObserver.unsubscribe(this); ○ イベントの購読をやめる。State の dispose とかで呼び出そう。 thisにはコールバック先のRouteAwareを指定
Slide 14
Slide 14 text
RouteObserver 購読 リスナーの RouteAwareを実装 画面遷移のイベントを購読 イベントの購読解除 RouteAware のメソッド push pop 時に呼び出される
Slide 15
Slide 15 text
RouteObserver RouteAware のメソッド ● void didPopNext() ○ 上に積まれていた画面が pop され自身が表示されたとき ● void didPush() ○ 自身が push されて表示されたとき ● void didPop() ○ 自身が pop されたとき ● void didPushNext() ○ 次の画面が push されたとき(自身は非表示)
Slide 16
Slide 16 text
これで画面遷移を検知できるように なった
Slide 17
Slide 17 text
これでめでたしと思いきや....
Slide 18
Slide 18 text
RouteObserver は1つの画面 (Route)に1つのリスナーしか登録で きない
Slide 19
Slide 19 text
RouteObserver の内部実装を見ると Map でリスナーを保持していて 1つの T (Route) に対して 1つの RouteAware(リス ナー) しか登録できないようになっている final Map _listeners = {}; まじか...
Slide 20
Slide 20 text
というのは幻想だった
Slide 21
Slide 21 text
alpha版のときは無理だったが いつの間にかできるようになってい た
Slide 22
Slide 22 text
Before After Before final Map _listeners = {}; After final Map> _listeners = >{};
Slide 23
Slide 23 text
Flutterは日々進化する!!!
Slide 24
Slide 24 text
まとめ ● RouteObserver で画面遷移を検知できる ● Flutterは日々進化する!最高!
Slide 25
Slide 25 text
ありがとうございました