Flutter中如何将FirebaseException重新抛出至UI层捕获?
解决方案
你的问题核心是AuthApi层捕获了FirebaseException但未将其传递到UI层,导致UI的try-catch无法捕获异常。以下是两种直接解决方式:
方法一:移除AuthApi层的异常捕获块
如果不需要在AuthApi层处理异常,直接移除内部的try-catch,让FirebaseAuth抛出的异常自然向上传递到UI层:
authApi.dart
Future<void> authFunc() async { // 直接调用FirebaseAuth认证方法,不捕获异常 await FirebaseAuth.instance.createUserWithEmailAndPassword( email: "user@example.com", password: "123456", ); }
ui.dart
try { await authFunc(); // 注册成功后的UI逻辑(如跳转首页、提示成功) } on FirebaseException catch (e) { // 根据Firebase异常码处理UI提示 switch(e.code) { case 'email-already-in-use': // 提示用户邮箱已被注册 break; case 'weak-password': // 提示密码强度不足 break; // 其他异常码处理 } } catch (e) { // 处理非Firebase类型的异常 }
方法二:在AuthApi层处理后重新抛出异常
如果需要在AuthApi层做日志记录等操作,再将异常传递给UI层,注意修正原代码的语法错误(on FirebaseException (e)应为on FirebaseException catch (e)),并使用rethrow抛出异常:
authApi.dart
Future<void> authFunc() async { try { await FirebaseAuth.instance.createUserWithEmailAndPassword( email: "user@example.com", password: "123456", ); } on FirebaseException catch (e) { // 这里可以添加日志记录、埋点等操作 print("Firebase认证异常:${e.code} - ${e.message}"); // 重新抛出异常,让UI层捕获 rethrow; } }
ui.dart
代码同方法一,即可正常捕获FirebaseException。
内容的提问来源于stack exchange,提问作者Smit Prajapati
相关产品推荐
相关产品推荐

