Try catch块无法捕获rethrow抛出的FirebaseAuthException异常问题
无法捕获异常的核心原因
UI层调用异步返回的signInWithEmailAndPassword方法时,没有添加await关键字。Dart的异步异常捕获规则要求必须await一个Future对象,它执行过程中抛出的异常才会被当前作用域的try-catch块捕获。如果不加await,你写的try-catch只能捕获同步代码的异常,异步方法内部抛出的异常会被判定为未处理异常,不会进入你写的catch逻辑。
修复方案
仅需修改UI层调用逻辑,添加await关键字即可:
try { // 新增await关键字等待异步方法执行完成 await authService.signInWithEmailAndPassword( emailController.text, passwordController.text); } catch (error) { print("ui rethrow"); // 此处可正常捕获到服务层rethrow的FirebaseAuthException,按错误码处理提示即可 }
你当前的Auth服务层代码逻辑没有问题,内部await了Firebase的认证方法、捕获异常后rethrow的写法完全符合要求,无需调整。
内容的提问来源于stack exchange,提问作者r0czak
相关产品推荐
相关产品推荐

