La question est peut-être en double mais je ne parviens pas à trouver la solution. Mon scénario d'application est le même que celui de la quasi-application. Mon premier écran est l'écran Splash et tient pendant deux secondes et ici la session de connexion est vérifiée et à cette condition, l'écran change comme ceci et le code ci-dessous est exécuté dans initState()
_checkPreference() async {
PreferencesConnector myprefs= PreferencesConnector();
id=await myprefs.readString('merchantid');
if(id==null||id==''){
Future.delayed(
const Duration(seconds: 2),
() => Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => Login(),settings: RouteSettings(name: '/login')),
));
}else{
Future.delayed(
const Duration(seconds: 2),
() => Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => DashBoard()),
));
}
}
Si la session retourne false, elle passe à l'écran login
, dans l'écran de connexion mon scaffold
à l'intérieur du widget WillPopScope
et cette classe est la classe stateful
return WillPopScope(
onWillPop: () {
if (Navigator.canPop(context)) {
//Navigator.pop(context);
Navigator.of(context).pop();
} else {
SystemNavigator.pop();
}
},
child:Scaffold(
body: Stack(
children: <Widget>[
et si LoginApi renvoie true, il passe à dashboard
comme ceci
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => DashBoard(),
settings: RouteSettings(name: '/dashboard')),
);
ici, tout fonctionne bien lorsque l'utilisateur est déjà connecté et nous atteignons le tableau de bord après le splash et mais il y a un bouton logOut
sur mon tableau de bord lorsque l'utilisateur appuie sur logout
puis il y a une boîte de dialogue apparaît qui demande la déconnexion - si j'appuie sur oui à partir du bouton de dialogue fonctionne comme ceci
onPressed:(){
clearSession();
// Navigator.of(context).popUntil(ModalRoute.());
// Navigator.of(context).popUntil('/login', (Route<dynamic> route) => false);
// Navigator.popUntil(context, ModalRoute.withName("/login"));
// Navigator.of(context).pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => Login()),);
},
après avoir appuyé sur la déconnexion, il atteint l'écran de connexion où je ne peux pas fermer l'application lorsque l'utilisateur appuie sur l'appareil depuis l'écran de connexion, mais il redirige vers le tableau de bord, puis j'ai appuyé sur puis sur l'application fermé.
Ce que vous devez faire, c'est d'abord effacer tout le chemin avant d'aller à l'écran login()
.
essaye ça:
onPressed:(){
clearSession();
//Navigator.popUntil(context, ModalRoute.withName('/'));
Navigator.pop(context,true);// It worked for me instead of above line
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => Login()),);
},
appelez cela sur votre bouton de déconnexion
void _logout() {
Navigator.popUntil(context, ModalRoute.withName('/login'));
}
voici le lien officiel docs