显示Flutter导航堆栈

Vla*_*d.d 6 flutter

我想查看Flutter中的导航堆栈。是否可以使用Navigator该类来打印导航堆栈以及有关Navigator内部内容的其他元信息?

Navigator使用print()方法打印只是给出了Navigator作为字符串。

预期结果: Navigator : { params...., params.... }

Jor*_*ies 7

我认为您目前可以执行此操作的唯一方法是覆盖Navigator该类并自己跟踪 Routes。

如果您查看Navigator 源代码,有一个名为的变量_history,其中包含所有导航路线,但遗憾的是无法访问它。


The*_*eIT 5

也许Navigatorobservers参数可以帮助您?虽然它会涉及手动跟踪Navigator. 然后,您可以routeStack根据需要对成员进行操作。

...
Navigator(
    observers: [MyNavigatorObserver()],
    onGenerateRoute: ...,
  )
...


class MyNavigatorObserver extends NavigatorObserver {
  List<Route<dynamic>> routeStack = List();

  void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
    routeStack.add(route);
  }

  void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
    routeStack.removeLast();
  }

  @override
  void didRemove(Route route, Route previousRoute) {
    routeStack.removeLast();
  }

  @override
  void didReplace({Route newRoute, Route oldRoute}) {
    routeStack.removeLast();
    routeStack.add(newRoute);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果是 `MaterialApp`,只需使用 `MaterialApp(navigatorObservers:[MyNavigatorObserver()], ...others...)` 设置即可 (2认同)

Bha*_*pal 5

黑客就在这里!暂时将以下行添加到您的代码中/调试完成后删除

Navigator.of(context).popUntil((route) { print(route.settings.name); return false; });
Run Code Online (Sandbox Code Playgroud)