Flutter-导航到新屏幕,然后清除以前的所有屏幕

时间:2018-10-07 13:39:44

标签: android dart flutter

我最多使用Navigator.push的6个屏幕转到付款页面。付款后,我想推送到“付款成功”页面,然后删除所有以前的屏幕,即使用“后退”按钮将返回到第一个屏幕。

注意:我已经尝试过pushReplacementNamed,但是它不起作用。

4 个答案:

答案 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()
};