在Flutter 中有一个路由监听的机制,使用路由监听 并实现 RouteAware 虚拟类就可以获得. 可以让我们的 页面拥有以下方法的监听
void didPopNext() {
// 从上一个路由页面返回 到当前页面
}
/// Called when the current route has been pushed.
void didPush() {
//进入当前页面
}
/// Called when the current route has been popped off.
void didPop() {
//退出当前页面
}
/// Called when a new route has been pushed, and the current route is no
/// longer visible.
void didPushNext() {
// 进入一个新的页面
}
如何监听路由?
MaterialApp(
……
navigatorObservers :
……
);
List<NavigatorObserver>? navigatorObservers;
navigatorObservers 是一个数组,表示可以多个监听。
我们可以继承 RouteObserver 类并实现响应的方法
class RouteChangeObserver<R extends Route<dynamic>> extends RouteObserver<R> {
@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 didStartUserGesture(Route route, Route? previousRoute) {
super.didStartUserGesture(route, previousRoute);
}
@override
void didStopUserGesture() {
super.didStopUserGesture();
}
}
最后,按照以下方式填写即可。
MaterialApp(
……
navigatorObservers : [RouteChangeObserver<PageRoute>()],
……
);