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}"); } } },
关键修改说明
- 异常捕获范围修正:把
signInWithEmailAndPassword移到try块内,登录时抛出的所有FirebaseAuthException都会被catch分支处理 - 移除多余await:
user是await登录方法后的返回值,不需要再用await user != null判断 - 优化错误文案:调整提示语逻辑,比如
invalid-email对应“邮箱格式无效”而非原有的“账号未找到”,更符合实际场景 - 补充默认分支:默认分支显示具体错误信息,方便调试未覆盖的异常类型
现在测试输入错误邮箱,会触发user-not-found分支,弹出“未找到该用户”的snackbar,异常处理逻辑就能正常工作了。
内容的提问来源于stack exchange,提问作者Harvey Jones
相关产品推荐
相关产品推荐

