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

Firebase Authentication异常处理突然失效问题求助

Firebase Auth异常处理失效的修复方案

你的代码核心问题在于没有把抛出异常的signInWithEmailAndPassword方法放在try代码块内,导致FirebaseAuthException根本不会被捕获,switch-case自然无法执行。

原代码里,auth.signInWithEmailAndPassword在try外面执行,一旦抛出异常,直接跳过整个try-catch逻辑,所以你能看到控制台打印错误,但snackbar完全没触发。

修复后的代码

onPressed: () async {
  try {
    // 将登录方法移到try内部,确保异常能被捕获
    var user = await auth.signInWithEmailAndPassword(
        email: emailController.text, password: passwordController.text);
    
    // user已经是await后的结果,不需要再用await判断
    if (user != null) {
      Navigator.pushAndRemoveUntil(
          context,
          MaterialPageRoute(builder: (context) => HomeScreen()),
          (route) => false);
    }
  } on FirebaseAuthException catch (e) {
    print(e.message);
    
    switch (e.code) {
      case "wrong-password":
        callSnackbar("密码错误");
        break;
      case "user-not-found":
        callSnackbar("未找到该用户");
        break;
      case "too-many-requests":
        callSnackbar("请求过于频繁,请稍后再试");
        break;
      case "invalid-email":
        callSnackbar("邮箱格式无效");
        break;
      default:
        callSnackbar("登录失败:${e.message}");
    }
  }
},

关键修改说明

  1. 异常捕获范围修正:把signInWithEmailAndPassword移到try块内,登录时抛出的所有FirebaseAuthException都会被catch分支处理
  2. 移除多余await:user是await登录方法后的返回值,不需要再用await user != null判断
  3. 优化错误文案:调整提示语逻辑,比如invalid-email对应“邮箱格式无效”而非原有的“账号未找到”,更符合实际场景
  4. 补充默认分支:默认分支显示具体错误信息,方便调试未覆盖的异常类型

现在测试输入错误邮箱,会触发user-not-found分支,弹出“未找到该用户”的snackbar,异常处理逻辑就能正常工作了。

内容的提问来源于stack exchange,提问作者Harvey Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:01:03