关闭设备上的后退按钮上的应用

时间:2019-02-22 12:45:22

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

    }
  }

如果会话返回false,则转到login屏幕,在登录屏幕中,我的scaffold小部件内的WillPopScope属于stateful

  return WillPopScope(
        onWillPop: () {

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

如果LoginApi返回true,则它会像这样移动到dashboard

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

这里,当用户已经登录并且启动后我们到达仪表板时一切正常,但是当用户按下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()),);

},

在按注销后,它会到达登录屏幕,当用户在登录屏幕中从设备上按回去时,我无法关闭该应用,但它重定向到仪表板,然后我按回去,然后应用关闭。 / strong>

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要做的是先清除所有路径,然后再进入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()),);

},

答案 1 :(得分:0)

在您的注销按钮上调用

  void _logout() {
      Navigator.popUntil(context, ModalRoute.withName('/login'));
    }

这是官方docs

的链接