flutter中Navigator.pushReplacement和Navigator.pushAndRemoveUntil有什么区别?

问题描述 投票:0回答:2

在flutter中,我们有两种方式在销毁当前页面的同时退出页面。第一个是pushReplacement-

Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
      return LocationScreen();
    }));

第二个是pushAndRemoveUntil-

Navigator.pushAndRemoveUntil(
        context, MaterialPageRoute(builder: (context) => LocationScreen()), (
        route) => false);
  }

这两者看起来完全一样。我通过谷歌搜索,但找不到满意的答案。有人可以解释一下这两者之间的区别吗?

flutter dart
2个回答
21
投票

想象一下您当前的导航堆栈是这样的:

/A
/B
/C

现在,您想要前往路线

/D
。调用
pushReplacement
后,导航堆栈将如下所示:

/A
/B
/D

就是这样,你用这个方法没有什么可以做的了。但是,在使用

pushAndRemoveUntil
时,您还可以指定路由谓词,该谓词会告诉您何时需要在推送下一条路由之前停止弹出堆栈。例如,您的路线谓词是路线
/A
,结果将如下所示:

/A
/D

注意,路由

/B
/C
已从堆栈中删除。

总结一下:

pushReplacement
仅替换顶部路由,而
pushAndRemoveUntil
可以替换多个路由,直到您定义的谓词为止。


0
投票
  • Navigator.pushReplacement:这会将当前屏幕替换为 新的。新屏幕取代了现有屏幕,并且 当前屏幕将从堆栈中删除。

    Navigator.pushAndRemoveUntil:这将删除所有以前的屏幕 直到满足某个条件为止。例如,您可以 删除所有屏幕并导航到新屏幕,确保 之前的上下文被完全删除。

例如,如果您位于登录屏幕并使用 PushReplacement 导航到主屏幕,则登录屏幕将被主屏幕替换。但如果你使用pushAndRemoveUntil,你可以删除所有以前的屏幕并直接导航到主屏幕,就像清除堆栈并重新开始一样。

© www.soinside.com 2019 - 2024. All rights reserved.