在颤动中关闭设备后退按钮上的应用程序

Far*_*ana 9 android dart flutter

问题可能是重复的,但我无法找到解决方案。我的应用场景与几乎应用相同。我的第一个屏幕是闪屏并保持两秒钟,这里登录会话被检查,在这种情况下屏幕改变如下,下面的代码运行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()),
          ));

    }
  }
Run Code Online (Sandbox Code Playgroud)

如果会话返回 false 则它进入login屏幕,在登录屏幕中我scaffoldWillPopScope小部件中,该类是stateful

  return WillPopScope(
        onWillPop: () {

         if (Navigator.canPop(context)) {
            //Navigator.pop(context);
            Navigator.of(context).pop();
          } else {
            SystemNavigator.pop();
          }
        },
        child:Scaffold(
        body: Stack(
          children: <Widget>[
Run Code Online (Sandbox Code Playgroud)

如果 LoginApi 返回 true 那么它就会dashboard变成这样

Navigator.pushReplacement(
                context,
                MaterialPageRoute(
                    builder: (context) => DashBoard(),
                    settings: RouteSettings(name: '/dashboard')),
              );
Run Code Online (Sandbox Code Playgroud)

在这里,当用户已经登录并且我们在启动后到​​达仪表板时一切正常,但是logOut 当用户按下时我的仪表板上有一个按钮logout然后会出现一个对话框要求注销 - 如果我从对话框中按是按钮是这样工作的

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

},
Run Code Online (Sandbox Code Playgroud)

按下注销后,它到达登录屏幕,当用户从设备返回登录屏幕时,我无法关闭应用程序,但它重定向到仪表板,然后我按下然后关闭应用程序。

在此处输入图片说明

anm*_*ail 5

您需要做的是在进入login()屏幕之前先清除所有路径。

尝试这个:

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

},
Run Code Online (Sandbox Code Playgroud)