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

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

路线:

  1. 首页:“/”
  2. 附近:“/附近”
  3. 已应用:“/applied”

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

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

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

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

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

  1. 首页
  2. 所选页面

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

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

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

【问题讨论】:

    标签: flutter routes navigation


    【解决方案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() 在上述情况下无法正常工作。我会更新我的帖子。
    猜你喜欢
    • 2019-12-02
    • 2016-01-15
    • 2018-10-06
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2020-11-22
    相关资源
    最近更新 更多