Flutter – Navigieren Sie zu einem neuen Bildschirm und löschen Sie alle vorherigen Bildschirme

Lesezeit: 2 Minuten

ich benutzte Navigator.push bis zu 6 Bildschirme, um zur Zahlungsseite zu gelangen. Nach der Zahlung möchte ich auf die Seite „Zahlung erfolgreich“ gehen und dann alle vorherigen Bildschirme entfernen, dh mit der Schaltfläche „Zurück“ kehren Sie zum allerersten Bildschirm zurück.

HINWEIS: Ich habe es versucht pushReplacementNamed und es funktioniert nicht.

  • Ich habe pushReplacementNamed versucht und es funktioniert nicht. Da hast du wohl was falsch gemacht.

    – Günter Zöchbauer

    7. Oktober 2018 um 13:41 Uhr

  • Nein habe ich nicht. verwenden pushRepalcementNamed führt mich zu einer neuen Route, aber wenn ich die Schaltfläche „Zurück“ verwende, wechselt sie zur letzten benannten Route, anstatt dass die Schaltfläche „Zurück“ nicht funktioniert.

    – Kingsley CA

    7. Oktober 2018 um 13:47 Uhr

  • Vielleicht möchten Sie weitere frühere Routen wie entfernen docs.flutter.io/flutter/widgets/Navigator/… Ihre Frage enthält jedoch keine Informationen, mit denen Sie Ihr Problem diagnostizieren können.

    – Günter Zöchbauer

    7. Oktober 2018 um 13:50 Uhr

  • Ja. Habe es jetzt erst herausgefunden. Trotzdem danke.

    – Kingsley CA

    7. Oktober 2018 um 13:54 Uhr

Ich habe es herausgefunden. Es war der Navigator.pushAndRemoveUntil Funktion. Wo ich die passieren musste PaymentSuccessful Widget als newRouteund der "/Home" route als Prädikat

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

  • Können Sie bitte erklären, was der Zweck der Verwendung ist ModalRoute.withName('/Home') um deine Antwort zu vervollständigen?

    – iDecode

    6. Januar 2021 um 15:55 Uhr

  • @iDecode Sie können hier auf die Dokumentation verweisen [api.flutter.dev/flutter/widgets/Navigator/… the ModalRoute.withName(‘/Home’) is used to ensure that when the back button is pressed the user is navigated to the “/Home Screen” -> “To remove routes until a route with a certain name, use the RoutePredicate returned from ModalRoute.withName”

    – Chichebe

    Nov 22, 2021 at 8:46

  • If you want to navigate to the root Screen, the replace "/Home" with "/". And you can also provide route arguments to MaterialPageRoute() using his props settings: RouteSettings(arguments: myArgs)

    – Manu

    Nov 30, 2021 at 13:02

  • to add more, here is the video explaining exactly this function: Tutorial Link

    – Hardik

    Jan 19, 2022 at 12:58


Accepted Answer is correct. But you can try this too.

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

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);
              });

dartKnightRises's user avatar
dartKnightRises

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

1438590cookie-checkFlutter – Navigieren Sie zu einem neuen Bildschirm und löschen Sie alle vorherigen Bildschirme

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy