我使用Navigator.push多达6个屏幕进入付款页面。付款后,我想推到“付款成功”页面,然后删除所有以前的屏幕iidoe使用后退按钮将返回到第一个屏幕。注:我试过pushReplacementNamed,但它不起作用。
Navigator.push
pushReplacementNamed
kupeojn61#
我明白了,这是Navigator.pushAndRemoveUntil函数,我必须将PaymentSuccessful小部件作为newRoute传递,将"/Home"路由作为 predicate 传递
Navigator.pushAndRemoveUntil
PaymentSuccessful
newRoute
"/Home"
_navPaymentSuccessful(){ Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (context) => PaymentSuccessful() ), ModalRoute.withName("/Home") ); }
qojgxg4l2#
接受的答案是正确的。但您也可以尝试此操作。
Navigator.pushAndRemoveUntil<dynamic>( context, MaterialPageRoute<dynamic>( builder: (BuildContext context) => YourPageNameGoesHere(), ), (route) => false,//if you want to disable back feature set to false );
chy5wohz3#
甚至更简单,我认为一个更好的方法是这样做的,这将在当前持久帧结束时调度一个回调,以推送到路由/loginPage并删除所有先前的路由,这样您可以确保渲染所有帧,然后导航到下一页。
/loginPage
SchedulerBinding.instance.addPostFrameCallback((_) { Navigator.of(context).pushNamedAndRemoveUntil( '/loginPage', (Route<dynamic> route) => false); });
sycxhyv74#
我建议在您的付款成功页面使用WillPopScope和onWillPop方法编写以下代码片段:
return WillPopScope( onWillPop: (){ Navigator.of(context) .pushNamedAndRemoveUntil('/Home', (Route<dynamic> route) => false); }, child: Scaffold() };
kiayqfof5#
如果您想将参数传递到新页面,请尝试以下操作:
Navigator.of(context).pushNamedAndRemoveUntil( '/new-route-name', arguments: { any object }, ModalRoute.withName("/the-route-name-that-you-want-back-to-it") );
5条答案
按热度按时间kupeojn61#
我明白了,这是
Navigator.pushAndRemoveUntil
函数,我必须将PaymentSuccessful
小部件作为newRoute
传递,将"/Home"
路由作为 predicate 传递qojgxg4l2#
接受的答案是正确的。但您也可以尝试此操作。
chy5wohz3#
甚至更简单,我认为一个更好的方法是这样做的,这将在当前持久帧结束时调度一个回调,以推送到路由
/loginPage
并删除所有先前的路由,这样您可以确保渲染所有帧,然后导航到下一页。sycxhyv74#
我建议在您的付款成功页面使用WillPopScope和onWillPop方法编写以下代码片段:
kiayqfof5#
如果您想将参数传递到新页面,请尝试以下操作: