1. 程式人生 > 其它 >Flutter獲取當前路由資訊和全域性路由監聽

Flutter獲取當前路由資訊和全域性路由監聽

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都可以監聽到。

參考