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

Flutter中SignInScreen的Firebase Auth UI错误自定义处理方案

自定义Firebase UI Auth SignInScreen的错误提示内容与展示方式

针对firebase_ui_auth: ^1.12.1版本的SignInScreen,可以通过以下两种方式自定义错误提示:

方法1:使用errorBuilder替换默认错误UI

SignInScreen提供了errorBuilder参数,允许你根据错误类型返回自定义的提示组件,直接替换默认的冗长错误展示。

示例代码:

SignInScreen(
  providers: providers,
  actions: [
    AuthStateChangeAction<SignedIn>((context, state) {
      Navigator.pushReplacementNamed(context, '/profile');
    }),
  ],
  // 自定义错误提示组件
  errorBuilder: (context, exception) {
    String errorMessage;
    // 根据Firebase Auth错误码匹配友好提示
    if (exception is FirebaseAuthException) {
      switch (exception.code) {
        case 'user-not-found':
          errorMessage = '未找到该用户,请检查账号是否正确';
          break;
        case 'wrong-password':
          errorMessage = '密码错误,请重新输入';
          break;
        case 'invalid-email':
          errorMessage = '邮箱格式不正确';
          break;
        default:
          errorMessage = '登录失败,请稍后重试';
      }
    } else {
      errorMessage = '未知错误';
    }

    // 返回自定义样式的错误文本
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
      child: Text(
        errorMessage,
        style: const TextStyle(color: Colors.redAccent, fontSize: 14),
        textAlign: TextAlign.center,
      ),
    );
  },
);

方法2:通过AuthStateChangeAction<AuthFailed>监听错误状态

如果需要更灵活的提示方式(比如显示SnackBar、弹窗),可以添加AuthStateChangeAction<AuthFailed>捕获登录失败状态,自行触发自定义提示。

示例代码:

SignInScreen(
  providers: providers,
  actions: [
    AuthStateChangeAction<SignedIn>((context, state) {
      Navigator.pushReplacementNamed(context, '/profile');
    }),
    // 监听登录失败事件
    AuthStateChangeAction<AuthFailed>((context, state) {
      String errorMessage;
      final exception = state.exception;
      if (exception is FirebaseAuthException) {
        switch (exception.code) {
          case 'user-not-found':
            errorMessage = '未找到该用户,请检查账号是否正确';
            break;
          case 'wrong-password':
            errorMessage = '密码错误,请重新输入';
            break;
          case 'invalid-email':
            errorMessage = '邮箱格式不正确';
            break;
          default:
            errorMessage = '登录失败,请稍后重试';
        }
      } else {
        errorMessage = '未知错误';
      }

      // 显示自定义SnackBar提示
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text(errorMessage),
          backgroundColor: Colors.redAccent,
          duration: const Duration(seconds: 3),
        ),
      );
    }),
  ],
);

注意事项

  • 需确保导入firebase_auth包,才能识别FirebaseAuthException类型
  • 可参考Firebase官方文档的错误码列表,补充更多场景的自定义提示
  • 两种方法可按需选择:errorBuilder适合替换页面内的默认错误区域,AuthStateChangeAction适合全局提示类的交互

内容的提问来源于stack exchange,提问作者tapizquent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:00:01