当我在 rxdart 中调用 currentUser 和 Observable 错误时,FirebaseAuth 抛出错误

FirebaseAuth throws error when I called currentUser and Observable error in rxdart

我创建了一个带有 Google 登录并支持 firestore 的应用程序,最近我将所有依赖项更新为更新版本。这里旧代码有一些问题我不知道是什么问题。

Future<String> getCurrentUser() async {
    var user = await _auth.currentUser();
    if (user == null) {
      return null;
    } else {
      return user.uid;
    }
}

在_auth.currentUser()附近显示错误;错误是 The expression doesn't evaluate to a function, so it can't be invoked. 我已经搜索过了,但没有任何效果。这是第一个问题。

第二个问题出现在 rxdart 包中。由于新软件包 Observable 不受支持并在互联网上搜索并尝试使用 Stream 但它们不起作用。 rxdart 问题的源代码在这里。

class AuthService {
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final FirebaseFirestore _db = FirebaseFirestore.instance;

  Stream<User> user;
  Stream<Map<String, dynamic>> profile;
  String uuid;

  AuthService() {
    Stream<User> user = Observable(_auth.authStateChanges);

    profile = user.switchMap((User u) {
      if (u != null) {
        return _db
            .collection('users')
            .doc(u.uid)
            .snapshots()
            .map((snap) => snap.data);
      } else {
        return Observable.just({});
      }
    });
  }
}

它在 return Observable.just({}); 附近显示错误,下一个问题出现在这一行 Stream<User> user = Observable(_auth.authStateChanges);

帮我解决这个问题,帮我理解我的问题。

currentUser 不再是方法,也不再是异步的。所以现在正确的调用是:

var user = _auth.currentUser;

我建议在将代码升级到最新版本时将 migration guide 放在手边,因为这些更改中有很多。

在较新版本的 Firebase Auth SDK for Flutter 中,如果您想要一个身份验证状态事件流,您应该使用 authStateChanges, as shown in the documentation.

设置一个身份验证状态流
FirebaseAuth.instance
  .authStateChanges()
  .listen((User user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });