flutter - 如何在 Flutter 中创建自定义后退导航
问题描述
我正在尝试在我的 Flutter 应用程序中实现自定义导航。
在我的主页上,我有以下可能的路线:
选项1
主 --> 仪表板 --> 用户交易列表 --> 交易页面 --> 详细信息页面
选项 2
主 --> 登录 --> 仪表板 --> 用户交易列表 --> 交易页面 --> 详细信息页面
我在选项 1 中遇到的问题是,当想要从详细信息页面向后导航选项 1 时,我希望能够转到交易页面,但导航会将我带回 Main。
在登录后的选项 2 中,当在仪表板上时,用户应该转到主页而不是返回登录页面。
我尝试使用 WillPopScope 如下:
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
Navigator.pop(context, MaterialPageRoute(builder: (context) => BuyerDealPage()),);
return false;
},
child: MaterialApp(
home: Scaffold(
但是通过上述方式,应用程序仍会一直导航回主页,而不是返回交易页面。
我尝试移动WillPopScope
下面的 Material 应用程序,这也不起作用。
我使用WillPopScope
不正确吗?我的想法是WillPopScope
覆盖后退按钮?
我也尝试过替换Navigator.pop
,Navigator.push
但这似乎也不起作用。
不确定它是否有帮助,但我已经WillPopScope
在我的所有页面上实现了,因为我想确保我指定后退导航。
编辑:关于我如何在页面之间推送的代码(例如用户交易列表 --> 交易页面)
Navigator.push(context,MaterialPageRoute(builder: (context) => BuyerDealPage()));
解决方案
如果您使用orNavigator.of(context).pop()
推送下一页,我认为只有一个标准应该适用于您的情况。Navigator.of(context).push()
Navigator.of(context).pushNamed()
对于第二种情况,登录后推送仪表板页面时,可以使用Navigator.of(context).pushReplacement()
方法,将登录页面替换为仪表板页面。这样,当您尝试从仪表板页面返回时,您将直接进入主页面。
如果你想用 Android 后退按钮实现相同的行为,你需要WillPopScope
像你一样包装你的页面,但在onWillPop
使用中:
WillPopScope(
onWillPop: () async {
Navigator.of(context).pop();
return false;
},
child: ...yourNextWidgetHere...
推荐阅读
- purescript - 如何将新字段添加到 Purescript 中的对象
- vba - 在幻灯片放映期间取消宏操作
- python - 如果没有足够的参数,我如何告诉 argparse 不要退出?
- matlab - MatLab ODE45 中的重复方程求解
- c# - 二维数组到双链接列表或c#中用于网格目的的自定义数据结构?
- access-token - 从密钥斗篷访问令牌中读取用户属性?
- css - 如何根据不同设备的视口高度提供 CSS 规则
- r - Shiny 中受密码保护的仪表板选项卡
- windows - 从 C: 驱动器中删除特定扩展文件,但两个文件夹除外
- python - 如何使用while循环创建python程序,3的倍数