firebase - 为什么 Future<String> 返回 "Instance of Future<String>"而不是我的 Stream 中的返回值

标签 firebase flutter dart google-cloud-firestore

我正在尝试获取当前登录用户的用户 ID。这就是我尝试获取字符串形式的 UserID 的方式,其中函数打印 $userId 和 $uid。

String userId;

Future<String> getUser() async {
  final FirebaseUser user = await FirebaseAuth.instance.currentUser();
  final String uid = user.uid.toString();

  print("uid in getuser function $uid");
  userId = uid;
  return uid;
}

这是我试图将 UserID(uid) 放入其中的 Stream(Futures 和 Stream 都在同一个类中)(Stream 中的 return 语句可以忽略)

// get hotel stream
Stream<List<Hotel>> get userHotels {

  print("This is the uid ${getUser().toString()} in Stream");
  return ownerCollection.document(uid).collection("hotels").snapshots()
     .map(_hotelListFromSnapshot);
}

打印 $getUser().toString() 在控制台中给出:“这是 Stream 中‘Future’的 uid 实例”,而不是打印实际的 UserID。

打印 $userId 在控制台中给出:“这是 Stream 中的 uid null”

请帮忙,我想获取当前登录 Stream 的用户的 UserId

最佳答案

如上定义getUser()返回 Future<String> 。所以toString()将返回 Instance of 'Future' .

您可能想做的是等待getUser()首先完成。 您可以通过使用异步生成器来做到这一点, async*yield* .

// get hotel stream
Stream<List<Hotel>> get userHotels async* {
  final uid = await getUser();
  print("This is the uid $uid in Stream");
  yield* ownerCollection.document(uid).collection("hotels").snapshots()
    .map(_hotelListFromSnapshot);
}

使用async*意味着您将返回 Stream 。然后等待getUser()最后,您可以使用 yield 在该流上放置值。 yield*具体意味着您正在输入另一个 Stream 的值在您要返回的那一位上。

关于firebase - 为什么 Future<String> 返回 "Instance of Future<String>"而不是我的 Stream 中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61538678/

相关文章:

android - Firebase 身份验证 - 发生网络错误(例如超时、连接中断或主机无法访问)

android - 是否可以将 FirestorRecyclerAdaper 与分页结合使用?

angular - firebase signInWithPhoneNumber recaptcha 客户端已被删除 0

Flutter/BLoC - 使用不包含 ArticlesBloc 类型的 Bloc 的上下文调用 BlocProvider.of()

dart - 如何在没有可选参数的情况下覆盖子类中的方法?

flutter - 如何在 Flutter 中安全地存储 API key ?

swift - firebase 查询和 swift

flutter : Is provider an alternative to the BLoC pattern?

dart - flutter.io "NoSuchMethodError: The getter ' isMacOS' 被调用为空。”

dart - Dart 中的 Object<type> 语法是什么意思?