Flutter - Navigate to a new screen, and clear all the previous screens

后端 未结 3 1796
旧时难觅i
旧时难觅i 2020-12-15 05:01

I used Navigator.push up to 6 screens to get to the payment page. After Payment, I want to push to the \"Payment Successful\" page then remove all the previous

相关标签:
3条回答
  • 2020-12-15 05:40

    I figured it out. It was the Navigator.pushAndRemoveUntil function. Where i had to pass the PaymentSuccessful widget as the newRoute, and the "/Home" route as the predicate

      _navPaymentSuccessful(){
        Navigator.pushAndRemoveUntil(
          context, 
          MaterialPageRoute(
            builder: (context) => PaymentSuccessful()
          ), 
         ModalRoute.withName("/Home")
        );
      }
    
    0 讨论(0)
  • 2020-12-15 05:42

    I would Suggest use WillPopScope in your Payment successful page and onWillPop method write following snippet of code:

     return WillPopScope(
          onWillPop: (){
            Navigator.of(context)
                .pushNamedAndRemoveUntil('/Home', (Route<dynamic> route) => false);
          },
          child: Scaffold()
    };
    
    0 讨论(0)
  • 2020-12-15 05:45

    even simpler and I think a better way would be to do it this way, this Schedules a callback for the end of the current persistent frame,to push to route /loginPage and removes all the previous routes,this way you can make sure that all the frames are rendered and then you navigate to next page.

     SchedulerBinding.instance.addPostFrameCallback((_) {
                    Navigator.of(context).pushNamedAndRemoveUntil(
                        '/loginPage', (Route<dynamic> route) => false);
                  });
    
    0 讨论(0)
提交回复
热议问题