Flutter:如何在Flutter中从堆栈中弹出上次访问的屏幕



假设我有三个屏幕:wallet,payments,add card。当我在add card屏幕上时,我想从堆栈弹出payments屏幕,并将其导航到wallet屏幕,而不使用navigator.push点击图标加上设备的后退图标。

下面是屏幕流程:

wallet屏幕上有一个按钮,导航到payments屏幕,然后payments屏幕上有一个按钮,导航到add card屏幕。所以,现在我想当我在add card屏幕上点击android的后退图标或add card屏幕上的图标时,都应该导航到wallet屏幕。

请告诉我怎么做。

从你的问题来看,你的导航堆栈应该如何看起来不是很清楚:payments是堆栈中的第一个,你能从那里到add cardwallet吗?还是应该只存在一个?

我认为你可以使用pushReplacement: https://api.flutter.dev/flutter/widgets/Navigator/pushReplacement.html

这样,它会自动将当前的路线替换为新的路线,你的后退按钮会直接关闭应用程序(或者回到之前的屏幕)。如果你想要一些自定义的行为,当后退按钮被按下时,你总是可以使用WillPopScope: https://api.flutter.dev/flutter/widgets/WillPopScope-class.html

Navigator.removeRoute(context, MaterialPageRoute(builder: (context) => payments()));

在删除支付屏幕时使用此代码

请尝试下面的代码

  1. PopAndPushNamed→把当前的路由从导航器中弹出,把一个命名的路由推到它的位置。

它从导航堆栈弹出支付屏幕,只有钱包屏幕留在导航堆栈

Navigator.popAndPushNamed(context, '/addCard');
  1. PushNamedAndRemoveUntil ->它将具有给定名称(Wallets)的路由推送到导航器上,然后删除之前的所有路由,直到谓词返回true。这里使用的是一个RoutePredicate,它总是返回false (Route Route) =>假的。在这种情况下,除了推送的钱包路由外,它会删除所有路由。
//named
Navigator.of(context)
.pushNamedAndRemoveUntil('wallets', (Route<dynamic> route) => false);

//not named
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
Wallets()), (Route<dynamic> route) => false),
  1. PopUntil ->在最紧密地封装给定上下文的导航器上重复调用pop,直到谓词返回true。谓词可能适用于同样的路线如果不止一次的路线。willhandlepopinternal是true。要弹出到具有特定名称的路由,可以使用ModalRoute.withName返回的RoutePredicate。
Navigator.popUntil(context, ModalRoute.withName('/wallets'));

try this:

Navigator.pushReplacement()

相关内容

  • 没有找到相关文章

最新更新