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

Dhr*_*aya 6 dart flutter

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

Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
      return LocationScreen();
    }));
Run Code Online (Sandbox Code Playgroud)

第二个是pushAndRemoveUntil-

Navigator.pushAndRemoveUntil(
        context, MaterialPageRoute(builder: (context) => LocationScreen()), (
        route) => false);
  }
Run Code Online (Sandbox Code Playgroud)

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

mko*_*lys 13

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

/A
/B
/C
Run Code Online (Sandbox Code Playgroud)

现在,您想要到达路线/D。调用后pushReplacement,导航堆栈将如下所示:

/A
/B
/D
Run Code Online (Sandbox Code Playgroud)

就是这样,您无法使用此方法执行任何其他操作。但是,在使用 时pushAndRemoveUntil,您还可以指定路由谓词,该谓词会告诉您何时需要在推送下一个路由之前停止弹出堆栈。例如,您的路由谓词是route /A,结果将如下所示:

/A
/D
Run Code Online (Sandbox Code Playgroud)

请注意,路由/B/C已从堆栈中删除。

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