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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:35:15