首页 > 解决方案 > 是否可以查看我们之前在 Flutter 上的导航页面?

问题描述

如何查看以前的导航页面?

示例:HomeScreen > ProductListScreen >ViewCart > Payment(现在我在支付页面中)

像这样:print(priousPages);

标签: flutterdart

解决方案


将上一页小部件作为参数传递给支付小部件构造函数。

// In page you want to navigate to Payment widget.
Navigator.of(context).push(MaterialPageRoute(
  builder: (context) => Payment(priousPages: this.runtimeType);
));

或者,你可以NavigatorObserver用来接收navigator的事件,你可以在observer中记录路由的变化。

class _NavigatorHistory extends NavigatorObserver {
  @override
  void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
    print("${route.settings.name} pushed");
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
    print("${route.settings.name} popped");
  }

  @override
  void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
    print("${oldRoute.settings.name} is replaced by ${newRoute.settings.name}");
  }

  @override
  void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) {
    print("${route.settings.name} removed");
  }
}

您可以使用route.settings.name来识别路线。所以当你创建路由时,你应该给一个路由名称。

MaterialPageRoute(
  builder: (context) => YourWidget(),
  settings: RouteSettings(name: "/payment")
)

最后,不要忘记将这个观察者注册到 App。

MaterialApp(
  navigatorObservers:[ _NavigatorHistory()],
  title: "App title",
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: homePage,
)

推荐阅读