web-dev-qa-db-fra.com

Flutter: passer à un nouvel écran sans retour

J'implémente un flux d'authentification dans mon application Flutter.

Après une tentative de connexion, CheckAuth (qui vérifie si un utilisateur est connecté ou non, puis ouvre l'écran d'accueil ou l'écran d'inscription en conséquence) est ouvert avec le code suivant: 

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

Problème: je peux me connecter avec succès à l'application, mais si je tape sur le bouton de retour une fois que je me suis connecté, l'écran de connexion (alors que je m'attends à ce qu'il quitte l'application) s'affiche.

Question: Comment passer d’un écran à l’autre dans Flutter sans le retour?  

Dois-je en quelque sorte supprimer l'historique du navigateur? Ou n'utilisez pas du tout le navigateur? J'ai essayé la méthode Navigator.replace, mais cela ne semblait pas fonctionner.

7
Darkhan

Vous devez également utiliser Navigator.pushReplacement lorsque en quittant l'écran d'authentification. Pas seulement lors de la redirection vers la page de connexion.

21
Rémi Rousselet

Vous devez utiliser

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

_context est un objet de BuildContext Et page est la page à laquelle vous avez dirigé.

2
Pullat Junaid