Flutter:Firebase_Auth 0.18 currentUser异常:未为类型Future <FirebaseUser> Function()

时间:2020-08-23 18:39:15

标签: firebase flutter dart firebase-authentication

只需将firebase_auth更新为最新的version 0.18.0+1 在官方文档中,要访问当前登录用户的uid,我们必须执行以下操作:

FirebaseAuth auth = FirebaseAuth.instance;

if (auth.currentUser != null) {
  print(auth.currentUser.uid);
}

但是,实现此代码时会引发异常: The getter 'uid' isn't defined for the type 'Future<FirebaseUser> Function() 自从FirebaseUser类在上一次更新中更改为User以来,这很奇怪。

我尝试删除依赖项,也尝试过flutter clean,然后重新导入依赖项和flutter pub get。这是我的包裹:

dependencies:
  flutter:
    sdk: flutter


  flutter_facebook_login: ^2.0.1
  provider: ^4.3.2
  google_sign_in: ^4.5.1
  firebase_auth: ^0.18.0
  cloud_firestore: "^0.14.0+2"
  firebase_core: "0.5.0"

问题仍然存在,当我按住Ctrl键并单击.currentUser;时,我将转到...>flutter_windows_1.17.3-stable>.pub-cach>hosted>pub.dartlang.org>firebase_auth-0.16.1>lib>src>firebase_auth.dart>FirebaseAuth 这很奇怪,因为最新版本是0.18而不是0.16。 这是我的代码:

  // method that transforms FirebaseUser object to UserCustom Object
  // below I get: Undefined class 'User'. Try changing the name to the name of an existing class, 
  // or creating a class with the name 'User'.
  UserCustom _userToUserModel(User user) {
    if (user == null) {
      return null;
    }
    return UserCustom(uid: user.uid);
  }

  // is connected ?
  @override
  Future<UserCustom> isConnected() async {
    try {
      var user = _auth.currentUser;
      if (user != null){

        return _userToUserModel(user);
      }
      return null;
    } catch (e) {
      rethrow;
    }
  }

// custom user model
class UserCustom {
  String uid;
  UserCustom({@required this.uid});
}

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您可能没有真的flutter pub get。这可以解释为什么您被指向错误的软件包版本。既然您声称自己已经做过,请尝试使用flutter pub cache repair修复发布缓存。

您可能还想执行flutter pub upgrade以确保您拥有最新的不间断版本的依赖关系。 firebase_auth软件包已进行了一些更新,修复了您当前的pubspec.yaml不受其约束的一些错误。

此外,请确保您对项目进行了干净的构建。更新项目依赖项时,不能使用有状态的热重装。