facebook twitter hatena line email

Flutter/画面遷移/画面遷移イベント検知

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

(注意:動作確認できず)

画面でイベント検知する

結局MyAppと Page側の routeObserverが同期されておらず didPush だけ機能したが、他が機能しなかった。

class MyApp extends StatelessWidget {
+    RouteObserver<PageRoute> routeObserver = new RouteObserver<PageRoute>();
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
                title: 'Memo',
                theme: ThemeData(
                primarySwatch: Colors.blue,
          ),
            home: ArticleListTopPage(title: 'Memo List Page'),
+            navigatorObservers: <NavigatorObserver>[routeObserver],
        );
    }
}

_TextPageState と ArticleTextPage は各々のクラス名を入れる。

class _TextPageState extends State<ArticleTextPage> with RouteAware {
  RouteObserver<PageRoute> routeObserver = new RouteObserver<PageRoute>();

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void dispose() {
    routeObserver.unsubscribe(this);
    super.dispose();
  }

  // この画面に戻ったとき
  void didPopNext() {
    debugPrint("didPopNext ${runtimeType}");
  }

  // 画面がpushされたとき
  void didPush() {
    debugPrint("didPush ${runtimeType}");
  }

  // 画面がpopされたとき
  void didPop() {
    debugPrint("didPop ${runtimeType}");
  }

  // 新しい画面へ移動した時
  void didPushNext() {
    debugPrint("didPushNext ${runtimeType}");
  }

参考

https://qiita.com/najeira/items/89d8014a30102204babb

https://speakerdeck.com/kuwapp/flutterdehua-mian-qian-yi-wojian-zhi-suru?slide=15