Flutter Firebase登录:将静态错误提示改为动态错误信息
实现Firebase登录的动态错误提示
首先,你当前代码的错误判断类型不对——Firebase Auth登录失败抛出的是FirebaseAuthException,而非PlatformException,需要通过异常的code字段区分具体错误场景,返回对应的提示文本。另外你的登录方法名和类名重复了,建议改成login避免冲突。
修改后的核心代码如下:
// 确保导入Firebase Auth异常类 import 'package:firebase_auth/firebase_auth.dart'; // ... 其他原有代码保持不变 ... void showErrorMessage(Object error) { String errorMessage; if (error is FirebaseAuthException) { // 根据Firebase官方错误码映射中文提示 switch (error.code) { case 'invalid-email': errorMessage = '邮箱格式不正确'; break; case 'user-disabled': errorMessage = '该账号已被禁用'; break; case 'user-not-found': errorMessage = '未找到该账号,请先注册'; break; case 'wrong-password': errorMessage = '密码错误,请重新输入'; break; case 'too-many-requests': errorMessage = '请求过于频繁,请稍后再试'; break; case 'operation-not-allowed': errorMessage = '当前登录方式未开启'; break; default: errorMessage = error.message ?? '发生未知错误'; break; } } else if (error is String) { errorMessage = error; } else { errorMessage = '发生意外错误'; } showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('登录失败'), content: Text(errorMessage), actions: <Widget>[ ElevatedButton( child: const Text('确定'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } // 修改方法名,避免和类名冲突 Future login() async { try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: _emailController.text.trim(), password: _passwordController.text.trim(), ); } catch (error) { showErrorMessage(error); } }
关键改动说明
- 异常类型修正:替换
PlatformException判断为FirebaseAuthException,这是Firebase Auth抛出的正确异常类型 - 错误码映射:通过
switch匹配Firebase官方定义的错误码,返回用户易懂的中文提示,覆盖登录场景常见错误 - 方法名优化:将原
LoginPage方法名改为login,避免和StatefulWidget类名重复引发潜在问题 - 兜底处理:保留字符串错误和未知异常的处理逻辑,确保所有错误场景都有对应提示
你可以根据需求补充更多Firebase错误码的映射,比如账号过期、令牌无效等场景。
内容的提问来源于stack exchange,提问作者Jhems
相关产品推荐
相关产品推荐

