我有五个屏幕和页面路由方向,如下所示:
登录->主页->借记->付款-> PaymentSuccess
在付款屏幕上,如果付款成功,我正在打开paymentSuccess屏幕。
我想这样做:
如果用户在PaymentSuccess
屏幕上单击后退按钮,则用户应转到HomeScreen
。
我使用了如下所示的pushAndRemoveUntil
,但是当用户在PaymentSuccessScreen
应用关闭时单击后退按钮时,没有路由到HomeScreen。
// Payment Screen
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(
builder: (context) {
return PaymentSuccessScreen(period: period);
},
), ModalRoute.withName('/home-screen'));
答案 0 :(得分:1)
在Login
页中,导航到Home
页时,使用
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomePage())),
在Home
页中,导航到Debit
页时,使用
Navigator.push(context, MaterialPageRoute(builder: (context) => DebitPage())),
在Debit
页中,导航到Payment
页时,使用
Navigator.push(context, MaterialPageRoute(builder: (context) => PaymentPage())),
现在在Payment
页面上,使用以下命令:
class PaymentPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Payment")),
body: WillPopScope(
onWillPop: () { // this is the block you need
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => HomePage()), (route) => false);
return Future.value(false);
},
child: Center(
child: RaisedButton(
child: Text("Go to payment success"),
onPressed: () => Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => PaymentSuccessPage())),
),
),
),
);
}
}