facebook twitter hatena line email

「Flutter/画面遷移/画面遷移イベント検知」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の5版が非表示)
行1: 行1:
==Scaffoldの画面でイベント検知する==
+
 
 +
(注意:動作確認できず)
 +
 
 +
==画面でイベント検知する==
 +
 
 +
結局MyAppと Page側の routeObserverが同期されておらず didPush だけ機能したが、他が機能しなかった。
 +
 
 +
<pre>
 +
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],
 +
        );
 +
    }
 +
}
 +
</pre>
  
 
_TextPageState と ArticleTextPage は各々のクラス名を入れる。
 
_TextPageState と ArticleTextPage は各々のクラス名を入れる。
行38: 行60:
 
   }
 
   }
 
</pre>
 
</pre>
参考:https://qiita.com/najeira/items/89d8014a30102204babb
+
 
 +
==参考==
 +
https://qiita.com/najeira/items/89d8014a30102204babb
 +
 
 +
https://speakerdeck.com/kuwapp/flutterdehua-mian-qian-yi-wojian-zhi-suru?slide=15

2019年11月16日 (土) 16:46時点における最新版

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

画面でイベント検知する

結局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