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

Flutter Firebase注册调用createUserWithEmailAndPassword时应用卡顿求助

Flutter Firebase注册卡顿问题排查与解决

问题分析

从控制台日志来看,核心问题是Creating user with ... with empty reCAPTCHA token——Firebase Auth执行注册请求时未获取到有效reCAPTCHA验证令牌,导致请求卡在验证环节,进而触发FrameTracker超时(UI线程阻塞)。

解决方案

1. 正确配置Firebase App Check(关键)

Firebase Auth当前默认要求App Check验证,未配置reCAPTCHA会直接导致注册请求停滞:

  • 登录Firebase控制台,进入App Check模块,为Android应用启用reCAPTCHA v3(或v2)验证
  • 获取reCAPTCHA密钥后,在android/app/src/main/AndroidManifest.xml中添加调试配置(正式发布前替换为生产配置):
    <meta-data
        android:name="com.google.firebase.appcheck.debug_token"
        android:value="你的调试令牌"/>
    
  • 在Flutter初始化代码中激活App Check:
    await FirebaseAppCheck.instance.activate(
      androidProvider: AndroidProvider.recaptchaV3,
    );
    

2. 优化异步调用避免UI阻塞

确保注册逻辑不在UI setState回调中直接执行,可封装到独立业务逻辑类中;若仍有卡顿,可尝试用compute隔离耗时操作(不过核心卡顿原因还是reCAPTCHA配置问题)。

3. 更新Firebase依赖版本

检查pubspec.yaml中的Firebase相关依赖,切换到最新稳定版:

firebase_core: ^latest_version
firebase_auth: ^latest_version
firebase_app_check: ^latest_version

执行flutter pub upgrade完成依赖更新。

4. 检查网络环境

确保测试设备网络稳定,Firebase Auth请求需要正常连接到Firebase服务器,网络波动也可能导致请求超时卡顿。

代码优化建议

简化嵌套try-catch,提升代码可读性:

@override
Future<Either<Failure, UserEntity>> signUpWithEmailPassword({
  required String name,
  required String email,
  required String password,
}) async {
  try {
    final response = await authentication.createUserWithEmailAndPassword(
      email: email,
      password: password,
    );
    if (response.user == null) {
      return Left(const Failure("User is null!"));
    }
    return Right(UserModel(
      id: response.user!.uid,
      email: email,
      name: name,
    ));
  } catch (e) {
    return Left(Failure(e.toString()));
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:46:08