【问题标题】:FirebaseAuth throws error when I called currentUser and Observable error in rxdart当我在 rxdart 中调用 currentUser 和 Observable 错误时,FirebaseAuth 抛出错误
【发布时间】:2021-01-29 22:59:04
【问题描述】:

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

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&lt;User&gt; user = Observable(_auth.authStateChanges);

帮我解决这个问题并帮助我理解我的问题。

【问题讨论】:

  • 第一个问题的答案如下。我建议为您的其他问题打开第二个问题,因为它不相关(而且我不立即知道答案)。

标签: firebase flutter dart firebase-authentication google-signin


【解决方案1】:

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

var user = _auth.currentUser;

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

【讨论】:

    【解决方案2】:

    在较新版本的 Firebase Auth SDK for Flutter 中,如果您需要身份验证状态事件流,则应使用authStateChanges 设置身份验证状态流,如documentation 所示。

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User user) {
        if (user == null) {
          print('User is currently signed out!');
        } else {
          print('User is signed in!');
        }
      });
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2022-11-03
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2020-09-27
      • 2018-01-21
      相关资源
      最近更新 更多