如何在返回流的函数中获取当前用户

Posted

技术标签:

【中文标题】如何在返回流的函数中获取当前用户【英文标题】:How to get current user inside a function that returns a stream 【发布时间】:2020-11-13 07:02:21 【问题描述】:
    我有一个包含用户未付总额的文档。 我正在使用 StreamBuilder 收听此文档。 流是返回 Stream 的函数。

当我注册一个新用户时,我创建了一个字段为 int 0 的 totalUnpaid 文档。 紧接着,我导航到一个显示当前总未付金额的主页。 以前,我将当前用户硬编码为字符串。 现在我已经实现了 Firebase 身份验证,我希望主页显示新用户的 totalUnpaid。

以前,我的直播是这样的:

  static Stream<DocumentSnapshot> getTotalUnpaid(String currentUser) 
    final doc = Firestore.instance.collection(currentUser).document('totalUnpaid');
    return doc.snapshots();
  

现在我创建了这个方法来获取我的当前用户:

  static Future<FirebaseUser> getCurrentUser() async 
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    return user;
  

如何在我的流中使用这个 Future? 我将不得不使用等待,这将要求函数是异步的,这将要求 Stream 成为未来,这将要求我的 StreamBuilder 成为 FutureBuilder。

这并不理想,因为每次用户添加商品时,totalUnpaid 都需要更新。

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

  static Stream<DocumentSnapshot> getTotalUnpaid() async*
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final doc = Firestore.instance.collection(user.uid).document('totalUnpaid');
    yield* doc.snapshots();
  

当您将函数标记为async* 时,您可以使用yield*,它将返回来自Stream 的值。

假设您使用 uid 作为集合名称,上述方法将起作用。

【讨论】:

完美运行。非常感谢哈达德

以上是关于如何在返回流的函数中获取当前用户的主要内容,如果未能解决你的问题,请参考以下文章

powerbuilder 的时间函数,如何获取当前系统时间

如何通过php获取当前时间和日期? [复制]

sql如何取得当前日期

如何在模板标签中获取当前用户?

如何在张量流的自定义损失中获取张量的形状

passport.js req.user 正在返回:'Promise false ' - 如何获取当前会话的用户名?