flutter - 是否可以查看我们之前在 Flutter 上的导航页面?
问题描述
如何查看以前的导航页面?
示例:HomeScreen > ProductListScreen >ViewCart > Payment(现在我在支付页面中)
像这样:print(priousPages);
解决方案
将上一页小部件作为参数传递给支付小部件构造函数。
// 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,
)
推荐阅读
- c# - 强制 Windows 从注册表中读取值,而无需重新启动并在 C# 代码中输入/退出
- azure-devops - 我必须在 Azure DevOps 中以相同的条件使用 AND OR
- sharepoint - 如何在替代周运行电源自动化?
- ios - 如何在 iPhone 13 Pro 上以 120 Hz 的频率刷新 SceneKit?
- collision-detection - UE4 Mesh几个碰撞点检测
- javascript - 在 v-for 循环中彼此相邻显示动态生成的表单
- haskell - 函数的所有可能值的列表
- c++ - C++14 中 lambda 的 std::result_of 限制
- java - Jpa Specification IN Clause onjoined property 未按预期工作
- angular - 在 Angular 中捆绑服务