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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:02:08