Flutter版本升级后Firebase Auth相关代码报错求助
解决Flutter升级后Firebase Auth及相关代码的版本兼容问题
一、核心问题根源:Firebase Auth API重大变更
3年前的firebase_auth版本中,currentUser是返回Future<User?>的方法,而当前版本中currentUser已改为同步只读属性,类型为User?,这是导致所有错误的核心原因。
二、分步解决所有问题
1. 修正getSignedInUser方法实现
将原依赖异步方法的逻辑改为直接读取同步属性,同时适配接口要求的Future返回值:
@override Future<Option<User1>> getSignedInUser() => Future.value(optionOf(firebaseAuth.currentUser?.toDomain()));
或者用更易读的async/await写法:
@override Future<Option<User1>> getSignedInUser() async { final firebaseUser = firebaseAuth.currentUser; return optionOf(firebaseUser?.toDomain()); }
2. 修复toDomain扩展方法不被识别的问题
- 确保扩展文件正确导入:在
FirebaseAuthFailure所在的dart文件顶部,导入定义扩展的文件:import 'path/to/your/firebase_user_domain_x.dart'; // 替换为实际文件路径 - 避免
User类命名冲突:如果项目中存在自定义User类,给firebase的User加别名区分:
扩展文件中:
使用时:import 'package:firebase_auth/firebase_auth.dart' as fb; import 'package:your_app/domain/user/user1.dart'; // 导入User1和UniqueId extension FirebaseUserDomainX on fb.User { User1 toDomain() { return User1(id: UniqueId.fromUniqueString(uid)); } }final fb.User? firebaseUser = firebaseAuth.currentUser;
3. (可选)更新Freezed类语法
当前Freezed版本已不再需要abstract关键字,建议同步更新User1类写法以符合最新规范:
@freezed class User1 with _$User1 { const factory User1({required UniqueId id}) = _User1; }
4. 依赖版本兼容性检查
确保以下依赖版本适配当前Flutter SDK:
firebase_auth:运行flutter pub upgrade firebase_auth升级到最新稳定版freezed、freezed_annotation:同步升级到最新版dartz:确保版本支持当前Dart空安全语法
三、验证修复后的完整代码示例
FirebaseAuthFailure类最终实现:
@LazySingleton(as: IauthFailure) class FirebaseAuthFailure implements IauthFailure { final FirebaseAuth firebaseAuth; final GoogleSignIn googleSignIn; FirebaseAuthFailure(this.firebaseAuth, this.googleSignIn); @override Future<Option<User1>> getSignedInUser() => Future.value(optionOf(firebaseAuth.currentUser?.toDomain())); }
内容的提问来源于stack exchange,提问作者nidhin ninan
相关产品推荐
相关产品推荐

