android Flutter -导航至新屏幕,并清除之前所有屏幕

0s0u357o  于 2023-02-02  发布在  Android
关注(0)|答案(5)|浏览(154)

我使用Navigator.push多达6个屏幕进入付款页面。付款后,我想推到“付款成功”页面,然后删除所有以前的屏幕iidoe使用后退按钮将返回到第一个屏幕。
注:我试过pushReplacementNamed,但它不起作用。

kupeojn6

kupeojn61#

我明白了,这是Navigator.pushAndRemoveUntil函数,我必须将PaymentSuccessful小部件作为newRoute传递,将"/Home"路由作为 predicate 传递

_navPaymentSuccessful(){
    Navigator.pushAndRemoveUntil(
      context, 
      MaterialPageRoute(
        builder: (context) => PaymentSuccessful()
      ), 
     ModalRoute.withName("/Home")
    );
  }
qojgxg4l

qojgxg4l2#

接受的答案是正确的。但您也可以尝试此操作。

Navigator.pushAndRemoveUntil<dynamic>(
        context,
        MaterialPageRoute<dynamic>(
          builder: (BuildContext context) => YourPageNameGoesHere(),
        ),
        (route) => false,//if you want to disable back feature set to false
);
chy5wohz

chy5wohz3#

甚至更简单,我认为一个更好的方法是这样做的,这将在当前持久帧结束时调度一个回调,以推送到路由/loginPage并删除所有先前的路由,这样您可以确保渲染所有帧,然后导航到下一页。

SchedulerBinding.instance.addPostFrameCallback((_) {
                Navigator.of(context).pushNamedAndRemoveUntil(
                    '/loginPage', (Route<dynamic> route) => false);
              });
sycxhyv7

sycxhyv74#

我建议在您的付款成功页面使用WillPopScope和onWillPop方法编写以下代码片段:

return WillPopScope(
      onWillPop: (){
        Navigator.of(context)
            .pushNamedAndRemoveUntil('/Home', (Route<dynamic> route) => false);
      },
      child: Scaffold()
};
kiayqfof

kiayqfof5#

如果您想将参数传递到新页面,请尝试以下操作:

Navigator.of(context).pushNamedAndRemoveUntil(
      '/new-route-name',
      arguments: {
         any object
      },
      ModalRoute.withName("/the-route-name-that-you-want-back-to-it")
);

相关问题