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
相关产品推荐
相关产品推荐

