it-swarm.com.de

Flattern: Wechseln Sie zu einem neuen Bildschirm ohne zurück

Ich implementiere einen Authentifizierungsfluss in meiner Flutter-App.

Nach einem Anmeldeversuch wird CheckAuth (das prüft, ob ein Benutzer angemeldet ist oder nicht, den Startbildschirm oder den Anmeldebildschirm entsprechend geöffnet) mit folgendem Code geöffnet: 

  void _signIn() async {
    await _auth
        .signInWithEmailAndPassword(
            email: _userEmail.trim(), password: _userPassword.trim())
        .then((task) {
      // go to home screen
      if (task.getIdToken() != null) {
        setState(() {
          Navigator.pushReplacement(
              context,
              new MaterialPageRoute(
                  builder: (BuildContext context) => new CheckAuth()));
        });
      } else {
        print("Authentication failed");
      }
    });
  }

Problem: Ich kann mich erfolgreich bei der App anmelden, aber wenn ich nach der Anmeldung auf die Schaltfläche "Zurück" tippe, wird wieder der Anmeldebildschirm angezeigt.

Frage: Wie kann man sich in Flutter ohne Rückweg von einem Bildschirm zum anderen bewegen?  

Muss ich den Navigatorverlauf irgendwie löschen? Oder verwenden Sie den Navigator überhaupt nicht? Ich habe die Methode Navigator.replace ausprobiert, aber es schien nicht zu funktionieren.

7
Darkhan

Sie müssen Navigator.pushReplacement verwenden, wenn Verlassen auch der Authentifizierungsbildschirm ist. Nicht nur bei der Weiterleitung zur Anmeldeseite.

21
Rémi Rousselet

Sie können die Methode pushAndRemoveUntil verwenden:

Schieben Sie die angegebene Route auf den Navigator, der den angegebenen Kontext am engsten umschließt, und entfernen Sie dann alle vorherigen Routen, bis predicate true zurückgibt. m alle Routen unterhalb der Push-Route zu entfernen, verwenden Sie ein [RoutePredicate], das immer false zurückgibt. (z. B. (Route<dynamic> route) => false).

Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => MainPage()),
  (Route<dynamic> route) => false,
);
6
Meysam

Sie müssen verwenden

Navigator
    .of(_context)
    .pushReplacement(new MaterialPageRoute(builder: (BuildContext context) => page));

Wo _context Objekt von BuildContext.__ ist, und page ist die Seite, zu der Sie geleitet werden.

2
Pullat Junaid