Flutter獲取當前路由資訊和全域性路由監聽
阿新 • • 發佈:2022-03-25
Flutter獲取當前路由資訊和全域性路由監聽
獲取當前路由名
通過Flutter提供的方式
var routePath = ModalRoute.of(context).settings.name;
print("current route: $name")
通過GetX的方式
var routePath = Get.currentRoute;
print("current route: $name");
PS 必須確保註冊了路由,否則無法使獲取到
配置全域性路由監聽
建立一個MyRouteObserver繼承RouteObserver類
- 重寫RouteObserver中的方法
class MyRouteObserver<R extends Route<dynamic>> extends RouteObserver<R> { @override void didPush(Route route, Route? previousRoute) { super.didPush(route, previousRoute); print( 'didPush route: ${route.settings.name}, previousRoute:${previousRoute?.settings.name}'); } @override void didPop(Route route, Route? previousRoute) { super.didPop(route, previousRoute); print( 'didPop route: ${route.settings.name}, previousRoute:${previousRoute?.settings.name}'); } @override void didReplace({Route? newRoute, Route? oldRoute}) { super.didReplace(newRoute: newRoute, oldRoute: oldRoute); print('didReplace newRoute: $newRoute,oldRoute:$oldRoute'); } @override void didRemove(Route route, Route? previousRoute) { super.didRemove(route, previousRoute); print('didRemove route: $route,previousRoute:$previousRoute'); } @override void didStartUserGesture(Route route, Route? previousRoute) { super.didStartUserGesture(route, previousRoute); print('didStartUserGesture route: $route,previousRoute:$previousRoute'); } @override void didStopUserGesture() { super.didStopUserGesture(); print('didStopUserGesture'); } }
這樣就可以監聽到所有路由pop,push,remove等動作,並且在其中加入自己的業務邏輯,不管是模態,dialog,bottomsheet都可以監聽到。