You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter登录报错调用Navigator.pop关闭Dialog出现黑屏如何解决

问题根因

  • 代码同时混用了try-catch和Future.catchError两套异常捕获逻辑,触发错误时会重复执行Navigator.pop(context):
    1. 登录请求报错后首先进入catchError回调,第一次执行pop关闭加载对话框
    2. 回调执行完成后代码继续向下执行,此时firebaseUser为null,进入else分支第二次执行pop,直接把登录页从路由栈中移除,路由栈为空就出现黑屏
  • 跳转到注册页时使用了pushNamedAndRemoveUntil搭配(route) => false参数,会清空之前的路由栈,也可能导致返回时栈空黑屏

修复方案

第一步:删除冗余的Future.catchError,统一用try-catch处理异常

修改后的loginAutentcatUser方法代码如下:

void loginAutentcatUser(BuildContext context) async {
  try {
    showDialog(
      context: context,
      barrierDismissible: false, // 禁止用户手动关闭加载对话框
      builder: (BuildContext context) {
        return ProgressDialog(message: 'Authenticating Please wait',);
      }
    );
    // 移除catchError,异常统一交给外层try-catch处理
    final firebaseUser = (await _firebaseAuth.signInWithEmailAndPassword(
      email: emailController.text, 
      password: passwordController.text
    )).user;
    
    if (firebaseUser != null) {
      userRef.child(firebaseUser.uid).once().then(
        (DataSnapshot snap) {
          // 先关闭加载对话框
          Navigator.pop(context);
          if (snap.value != null) {
            Navigator.pushNamedAndRemoveUntil(
              context, MainScreen.idScreen, (route) => false
            );
            displayToastMessage('登录成功', context);
          } else {
            _firebaseAuth.signOut();
            displayToastMessage('用户不存在,请创建新账号', context);
          }
        },
      );
    } else{
      Navigator.pop(context);
      displayToastMessage('发生未知错误', context);
    }
  } on PlatformException catch (err) {
    Navigator.pop(context);
    displayToastMessage('错误:02 ${err.toString()}', context);
  } catch (err) {
    Navigator.pop(context);
    displayToastMessage('错误:03 ${err.toString()}', context);
  }
}

第二步:修改注册页跳转逻辑

跳转到注册页不要清空路由栈,把pushNamedAndRemoveUntil替换为普通的pushNamed:

// 替换原有跳转逻辑
Navigator.pushNamed(context, RegistrationScrren.idScreen);

效果说明

修改后所有错误场景只会执行一次pop关闭加载对话框,不会误删登录/注册页,报错后会停留在当前页面,用户可以重新输入账号密码提交。

内容的提问来源于stack exchange,提问作者Md. Fazle Rabbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:45:07