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');
  }
}
  • 然后在MaterialApp中添加
final MyRouteObserver<PageRoute> routeObserver = MyRouteObserver<PageRoute>();
MaterialApp(navigatorObservers: routeObserver])

這樣就可以監聽到所有路由pop,push,remove等動作,並且在其中加入自己的業務邏輯,不管是模態,dialog,bottomsheet都可以監聽到。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM