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

Kin*_*ics 13 android dart flutter

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

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

Kin*_*ics 17

我想到了。这是Navigator.pushAndRemoveUntil功能。我必须将PaymentSuccessful小部件作为传递newRoute,将"/Home"路线作为谓词传递

  _navPaymentSuccessful(){
    Navigator.pushAndRemoveUntil(
      context, 
      MaterialPageRoute(
        builder: (context) => PaymentSuccessful()
      ), 
     ModalRoute.withName("/Home")
    );
  }
Run Code Online (Sandbox Code Playgroud)

  • 您能否解释一下使用 `ModalRoute.withName('/Home')` 来完成您的答案的目的是什么? (11认同)
  • 我发现不需要用“/”指定路由,只需写一个谓词(_)=> false即可。这是我的示例:``Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LoginPage()), (_) => false);``` (2认同)

mah*_*mnj 14

甚至更简单,我认为更好的方法是这样做,这会为当前持久帧的末尾安排一个回调,以推送路由/loginPage并删除所有先前的路由,这样您就可以确保所有帧呈现,然后您导航到下一页。

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


gsm*_*gsm 11

接受 答案是正确的。但是你也可以试试这个。

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