【问题标题】:close app on device back button in flutter在颤动中关闭设备后退按钮上的应用程序
【发布时间】:2019-02-22 12:45:22
【问题描述】:

问题可能重复,但我无法找到解决方案。我的应用场景与几乎应用相同。我的第一个屏幕是启动屏幕并保持两秒钟,在这里检查登录会话,在这种情况下屏幕会发生这样的变化,下面的代码在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 屏幕,在登录屏幕中我的 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>[

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

},

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

【问题讨论】:

    标签: android dart flutter


    【解决方案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()),);
    
    },
    

    【讨论】:

    • @farhana 太棒了!!
    【解决方案2】:

    在您的注销按钮上调用它

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

    这里是官方docs的链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2019-12-17
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2017-01-28
      • 2020-05-11
      相关资源
      最近更新 更多