我最多使用Navigator.push
的6个屏幕转到付款页面。付款后,我想推送到“付款成功”页面,然后删除所有以前的屏幕,即使用“后退”按钮将返回到第一个屏幕。
注意:我已经尝试过pushReplacementNamed
,但是它不起作用。
答案 0 :(得分:11)
更简单,我认为一种更好的方法是这样做,
此方法为当前持久帧的末尾调度一个回调,以推送到路由/loginPage
并删除所有先前的路由,这样可以确保所有帧都已渲染,然后导航到下一页。
SchedulerBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).pushNamedAndRemoveUntil(
'/loginPage', (Route<dynamic> route) => false);
});
答案 1 :(得分:10)
接受的答案是正确的。但你也可以试试这个。
Navigator.pushAndRemoveUntil<dynamic>(
context,
MaterialPageRoute<dynamic>(
builder: (BuildContext context) => YourPageNameGoesHere(),
),
(route) => false,//if you want to disable back feature set to false
);
答案 2 :(得分:7)
我知道了。这是Navigator.pushAndRemoveUntil
函数。我必须将PaymentSuccessful
小部件传递为newRoute
,将"/Home"
路由传递为谓词
_navPaymentSuccessful(){
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => PaymentSuccessful()
),
ModalRoute.withName("/Home")
);
}
答案 3 :(得分:2)
我建议在您的“付款成功”页面中使用WillPopScope,并在onWillPop方法中编写以下代码段:
return WillPopScope(
onWillPop: (){
Navigator.of(context)
.pushNamedAndRemoveUntil('/Home', (Route<dynamic> route) => false);
},
child: Scaffold()
};