Flutter 在使用Navigator.pushReplacementName()替换Flatter中的页面后,如何在屏幕中启用“后退”按钮?

Flutter 在使用Navigator.pushReplacementName()替换Flatter中的页面后,如何在屏幕中启用“后退”按钮?,flutter,flutter-dependencies,Flutter,Flutter Dependencies,假设我有两个屏幕A和B 我在屏幕A上,使用pushReplacementNamed()进入屏幕B 现在我想回到用户向右滑动时的屏幕A(iOS中默认的后退按钮) 屏幕A: Navigator.pushReplacementNamed(context, '/B'), 屏幕B: WillPopScope( onWillPop: () async { Navigator.pushReplacementNamed(context, '/A'); retur

假设我有两个屏幕A和B

我在屏幕A上,使用pushReplacementNamed()进入屏幕B

现在我想回到用户向右滑动时的屏幕A(iOS中默认的后退按钮)

屏幕A:

  Navigator.pushReplacementNamed(context, '/B'),
屏幕B:

WillPopScope(
      onWillPop: () async {
        Navigator.pushReplacementNamed(context, '/A');
        return false;
      }),
但这是行不通的。“后退”按钮仍处于禁用状态


注意-我不想在AppBar中定制后退按钮来实现这一点。我想使用默认的后退按钮行为。

我认为您的代码错误在于,您从onWillPop返回false,return false忽略了后退按钮的动作。试着把它改成真的

另外,如果您希望最终从屏幕B返回到屏幕A,只需在屏幕A上使用push(),然后在屏幕B上使用onWillPop,就更合理了。您不再需要使用navigator手动弹出路线,只需返回true即可

更新 作为对您下面评论的回应,对于您想要实现的目标,您通常可以在
主页
页面上推送一条路线,然后在其他页面上使用
推送名称和移除直到

Navigator.of(context).pushandremoveintill(“B”,ModalRoute.withName(“Home”);
它将推送您想要的页面并删除所有内容,直到页面主页。由于“Home”现在将始终是根,因此您不再需要覆盖
onWillPop
,并且可以继续使用正常的后退按钮

注意:页面“主页”必须已经存在于堆栈中才能正常工作


如果要推送并删除堆栈中的所有内容,请更改:

 ModelRoute.withName("Home"),

(路由)=>错误,

首先,向右滑动(从边缘)仅在iOS设备上可用,默认情况下不在Android上。第二,如果您使用pushReplacement,那么
导航器将替换堆栈中的现有路由,因此您不能这样返回。我没有使用现有路由。我知道它们是空的。我正在提供willScope上应该发生的事情。我很困惑为什么willScope代码不起作用。将其更改为true不起作用。我的抽屉里实际上有多个屏幕,这就是为什么我使用替换方法。我希望所有抽屉屏幕都返回主页,而该主页不在后按抽屉中。@chetankhana check
(Route<dynamic> route) => false,