画面遷移のたびに特定の処理を実行したい時はNavigatorObserver
で処理を呼び出せる。
NavigatorObserverのサブクラスを作成する
class MyNavigatorObserver extends NavigatorObserver { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { super.didPush(route, previousRoute); // 画面遷移が完了した後に実行したい処理を記述します。 print('画面遷移が完了しました。'); } }
Navigatorに登録する
NavigatorのnavigatorObserversに、作成したMyNavigatorObserverのインスタンスを登録する。go_router
を利用しているときは、observers
に設定する。
Navigator( // ... navigatorObservers: [MyNavigatorObserver()], // ... );
これで、画面遷移が完了するたびにMyNavigatorObserver
のdidPush
メソッドが呼ばれて指定した処理が実行するようになる。
NavigatorObserver
には他の画面遷移イベントに対応するメソッドも用意されているので、必要に応じて実装を追加する。引数でルーティングの情報を受け取れるので、それで特定の画面では処理をスキップする、みたいなこともできる。
class MyNavigatorObserver extends NavigatorObserver { @override void didPush(Route route, Route? previousRoute) { super.didPush(route, previousRoute); } @override void didPop(Route route, Route? previousRoute) { super.didPop(route, previousRoute); } @override void didReplace({Route? newRoute, Route? oldRoute}) { super.didReplace(newRoute: newRoute, oldRoute: oldRoute); } @override void didRemove(Route route, Route? previousRoute) { super.didRemove(route, previousRoute); } @override void didStopUserGesture() { super.didStopUserGesture(); } }