在flutter中,我们有两种方式在销毁当前页面的同时退出页面。第一个是pushReplacement-
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
return LocationScreen();
}));
第二个是pushAndRemoveUntil-
Navigator.pushAndRemoveUntil(
context, MaterialPageRoute(builder: (context) => LocationScreen()), (
route) => false);
}
这两者看起来完全一样。我通过谷歌搜索,但找不到满意的答案。有人可以解释一下这两者之间的区别吗?
想象一下您当前的导航堆栈是这样的:
/A
/B
/C
现在,您想要前往路线
/D
。调用 pushReplacement
后,导航堆栈将如下所示:
/A
/B
/D
就是这样,你用这个方法没有什么可以做的了。但是,在使用
pushAndRemoveUntil
时,您还可以指定路由谓词,该谓词会告诉您何时需要在推送下一条路由之前停止弹出堆栈。例如,您的路线谓词是路线/A
,结果将如下所示:
/A
/D
注意,路由
/B
和 /C
已从堆栈中删除。
总结一下:
pushReplacement
仅替换顶部路由,而pushAndRemoveUntil
可以替换多个路由,直到您定义的谓词为止。
Navigator.pushReplacement:这会将当前屏幕替换为 新的。新屏幕取代了现有屏幕,并且 当前屏幕将从堆栈中删除。
Navigator.pushAndRemoveUntil:这将删除所有以前的屏幕 直到满足某个条件为止。例如,您可以 删除所有屏幕并导航到新屏幕,确保 之前的上下文被完全删除。
例如,如果您位于登录屏幕并使用 PushReplacement 导航到主屏幕,则登录屏幕将被主屏幕替换。但如果你使用pushAndRemoveUntil,你可以删除所有以前的屏幕并直接导航到主屏幕,就像清除堆栈并重新开始一样。