Flutter 导航返回主屏幕

Posted

技术标签:

【中文标题】Flutter 导航返回主屏幕【英文标题】:Flutter navigation back to home screen 【发布时间】:2020-09-22 09:35:17 【问题描述】:

我有一个具有以下抽屉的颤振应用程序:

路线:

    首页:“/” 附近:“/附近” 已应用:“/applied”

我想要实现的行为是当用户从附近和应用的屏幕单击 android 后退按钮时,应用程序应将它们带到主屏幕。如果他们再次按下主屏幕上的返回按钮,则会将他们从应用程序中移除。

在这里澄清一下,如果他们去附近,然后申请,然后点击返回按钮,它应该带他们回家,而不是申请。

这是我在选择附近和应用的抽屉项目时导航的代码:

Navigator.pushNamedAndRemoveUntil(
    context, 
    routeName, 
    ModalRoute.withName("/")
);

我希望这会在堆栈中留下以下路由:

    首页 所选页面

但是当我点击 android 上的后退按钮时,我得到的是来自附近或应用的屏幕,它会将我带出应用程序,而不是让我回到主屏幕。

我错过了什么?如何实现我正在寻找的行为?

请注意,我知道有一个使用 WillPopScope 小部件的解决方案,但我正在寻找一个使用导航堆栈的解决方案。更重要的是,我很想知道为什么上述情况不起作用。

【问题讨论】:

【参考方案1】:

在 NearBy 和 Apply 小部件中添加这个 WllPopCallBack()。

Future<bool> _willPopCallback() async 
     Navigator.pushNamedAndRemoveUntil(
    context, 
    routeName, 
    ModalRoute.withName("/")
);
    return false; // return true if the route to be popped

在 NearBy 的 Scaffold() 上添加这个 WllPopScope 小部件,并像这样应用小部件:

new WillPopScope(child: new Scaffold(), onWillPop: _willPopCallback)

【讨论】:

感谢您的回答。我希望不必使用 WillPopScope。我认为 Flutter 有一个用于此目的的导航堆栈,并希望使用它,并且会理解为什么 pushNamedAndRemoveUntil() 在上述情况下无法正常工作。我会更新我的帖子。

以上是关于Flutter 导航返回主屏幕的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 导航到新屏幕并返回

如何在 Flutter 的底部导航中处理后退导航

基于是新登录还是返回用户在 Flutter 中导航屏幕

如何解决 Box not Found 错误 Hive Flutter

Flutter Dropdown Button在屏幕导航期间不保存状态

Flutter 导航,重新打开页面而不是再次推送