繁体   English   中英

如何创建一个 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 监听从 Flutter 中的文档引用列表创建的多个 Firestore 文档

[英]How to create one stream listening to multiple Firestore documents created from list of documents references in Flutter

我试图创建一个 stream,它使用从 Firebase Firestore 存储和获取的多个文档引用。

假设我有两个名为usersdocuments的集合。 创建用户时,他会在users集合中获取具有其id的文档,该文档具有名为documentsHasAccessTo的字段,该字段是对documents集合中文档的引用列表。 重要的是,这些文档可以位于documents集合内的不同子 collections 中,因此我不想查询整个documents并对其进行过滤,以保存 Firestore 传输并使其更快我已经知道存储在documentsHasAccessTo中的documents的路径。

因此,例如,我可以让用户在users/<user uid> documentsHasAccessTo中包含数据,其中包含存储 3 个不同文档引用的 filesHasAccessTo 字段。

我想实现这样的目标(未经测试):

final userId = 'blablakfn1n21n4109';
final usersDocumentRef = FirebaseFirestore.instance.doc('users/$userId');
usersDocumentRef.snapshots().listen((snapshot) {
    final references = snapshot.data()['documentsHasAccessTo'] as List<DocumentReference>;

    final documentsStream =  // create single query stream using all references from list
});

请记住,如果这个 stream 会更新查询,如果documentsHasAccessTo HasAccessTo 像上面的示例一样发生变化,那也很棒,因此我在usersDocumentReferences上使用了snapshots()而不是单个get()获取。

我越想这个我开始相信这很简单是不可能的,或者有一个更简单和干净的解决方案。 我对任何事情都持开放态度。

您可以使用rxdartswitchMapMergeStream

usersDocumentRef.snapshots().switchMap((snapshot) {
  final references = snapshot.data()['documentsHasAccessTo'] as List<DocumentReference>;
  return MergeStream(references.map(ref) => /* do something that creates a stream */));
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM