代码之家  ›  专栏  ›  技术社区  ›  Farhana Naaz Ansari Jay Dwivedi

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

  •  0
  • Farhana Naaz Ansari Jay Dwivedi  · 技术社区  · 7 年前

    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 屏幕,在登录屏幕my scaffold 内进 WillPopScope widget类是 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()),);
    
    },
    

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

    enter image description here

    0 回复  |  直到 7 年前
        1
  •  4
  •   Farhana Naaz Ansari Jay Dwivedi    7 年前

    你要做的是在去 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()),);
    
    },
    
        2
  •  0
  •   End User    7 年前

    在注销按钮上调用此项

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

    这是官方的链接 docs