「Flutter/画面遷移/画面遷移イベント検知」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==Scaffoldの画面でイベント検知する== _TextPageState と ArticleTextPage は各々のクラス名を入れる。 class _TextPageState extends State<ArticleTe...」) |
|||
(同じ利用者による、間の7版が非表示) | |||
行1: | 行1: | ||
− | |||
− | + | (注意:動作確認できず) | |
+ | ==画面でイベント検知する== | ||
+ | |||
+ | 結局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 は各々のクラス名を入れる。 | ||
+ | <pre> | ||
class _TextPageState extends State<ArticleTextPage> with RouteAware { | class _TextPageState extends State<ArticleTextPage> with RouteAware { | ||
RouteObserver<PageRoute> routeObserver = new RouteObserver<PageRoute>(); | RouteObserver<PageRoute> routeObserver = new RouteObserver<PageRoute>(); | ||
行18: | 行40: | ||
} | } | ||
− | // | + | // この画面に戻ったとき |
void didPopNext() { | void didPopNext() { | ||
debugPrint("didPopNext ${runtimeType}"); | debugPrint("didPopNext ${runtimeType}"); | ||
} | } | ||
− | // | + | // 画面がpushされたとき |
void didPush() { | void didPush() { | ||
debugPrint("didPush ${runtimeType}"); | debugPrint("didPush ${runtimeType}"); | ||
} | } | ||
− | // | + | // 画面がpopされたとき |
void didPop() { | void didPop() { | ||
debugPrint("didPop ${runtimeType}"); | debugPrint("didPop ${runtimeType}"); | ||
} | } | ||
− | // | + | // 新しい画面へ移動した時 |
void didPushNext() { | void didPushNext() { | ||
debugPrint("didPushNext ${runtimeType}"); | debugPrint("didPushNext ${runtimeType}"); | ||
} | } | ||
+ | </pre> | ||
+ | |||
+ | ==参考== | ||
+ | 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