Flutter 中 pushReplacementNamed 和 popAndPushNamed 的区别是什么?

Trầ*_*Tâm 10 navigation flutter

中的NavigatorStateFlutter#navigator.dart有 2 个具有类似行为的方法。FlutterpushReplacementNamedpopAndPushNamedFlutter 有什么区别?

pushReplacementNamed

通过推送名为 [routeName] 的路线替换导航器的当前路线,然后在新路线完成动画处理后处理之前的路线。

popAndPushNamed

从导航器弹出当前路线并在其位置推送命名路线。

A R*_*A R 27

如果您对数据结构有任何了解,那么您就会了解堆栈。如果您甚至有基本的知识stacks,那么您就知道pushpop

如果不这样做,推送是将元素添加到元素堆栈的顶部,弹出是从同一堆栈中删除顶部元素。

因此,在 Flutter 的情况下,当我们导航到另一个屏幕时,我们使用push方法和Navigator小部件将新屏幕添加到堆栈顶部。自然地,这些pop方法将从堆栈中删除该屏幕。

因此,让我们转到 Sample_Project的代码库,看看如何从Screen1 to Screen2. 您可以通过运行示例应用程序来试验这些方法。

new RaisedButton(
   onPressed:(){
   Navigator.of(context).pushNamed('/screen2');
},
   child: new Text("Push to Screen 2"),
),
Run Code Online (Sandbox Code Playgroud)

那很短。

那确实是。在pushNamed方法的帮助下,我们可以导航到任何在main.dart. 我们称他们namedRoute为参考。这种方法的用例非常简单。简单地导航。

弹出它

推送 Screen2 后堆栈

现在,当我们想要摆脱上次访问的屏幕时,Screen2在这种情况下,我们需要pop使用 pop 方法从导航器的堆栈中路由。

Navigator.of(context).pop();
Run Code Online (Sandbox Code Playgroud)

请记住,这行代码包含在您的onPressed方法中。

弹出屏幕 2 后的堆栈

使用 Scaffold 时,通常不需要显式弹出路由,因为 Scaffold 会自动向其 AppBar 添加一个“后退”按钮,该按钮会Navigator.pop()在按下时调用。即使在 Android 中,按下设备的后退按钮也会这样做。但是,对于其他用例,例如当用户单击“取消”按钮时弹出 AlertDialog,您可能需要此方法。

用例:pushReplacementNamed

当用户成功登录,并且现在处于“DashboardScreen可能”状态时,您无论如何都不希望用户返回LoginScreen。所以登录路由应该完全被仪表板路由取代。另一个例子是HomeScreenSplashScreen. 它应该只显示一次,用户不应该HomeScreen再次返回它。在这种情况下,由于我们要进入一个全新的屏幕,我们可能希望使用此方法为其输入动画属性。

用例:popAndPushNamed

假设您正在构建一个购物应用程序,该应用程序显示其中的产品列表,ProductsListScreen并且用户可以在FiltersScreen. 当用户单击Apply Changes按钮时,FiltersScreen应该弹出并推回到ProductsListScreen具有新过滤器值的 。这里的退出动画属性popAndPushNamed看起来更合适。

pushReplacementNamed will execute the enter animation and popAndPushNamed will execute the exit animation.

Navigator.of(context).pushReplacementNamed('/screen4');
                       //and
Navigator.popAndPushNamed(context, '/screen4');
Run Code Online (Sandbox Code Playgroud)

前后堆叠

有关更多信息,请访问Pooja_Bhaumik 的此站点


enc*_*bos 22

只是一个简短的答案。

区别仅在于动画flutter 执行。

  • pushReplacementNamed -->> “进入动画”
  • popAndPushNamed -->> “退出动画”

用户 AR 在他的回答中也发布了这个。

pushReplacementNamed 将执行进入动画,popAndPushNamed 将执行退出动画。


  • 这才是真正的答案 (4认同)