如何比较两个不同Firebase集合的两个不同流,并返回Flutter中两个文档中都存在的文档?

时间:2020-07-06 00:13:59

标签: firebase flutter firebase-realtime-database stream

`getMatches(String userId)异步{

return StreamBuilder(
  stream: Firestore.instance.collection("users")
  .document(userId).collection("chosenList").snapshots(),
  builder: (context, snapshot) {
    return StreamBuilder(
      stream: Firestore.instance.collection("users")
  .document(userId).collection("selectedList").snapshots(),
      builder: (context, snapshot1) {
        if(!snapshot.hasData || !snapshot1.hasData) {
          return CircularProgressIndicator();

        }
        for (DocumentSnapshot doc in snapshot.data) {
          for(DocumentSnapshot docs in snapshot1.data) {
            if(doc.documentID == docs.documentID) {
              print(docs.documentID);
            }
          }
        }

      });

  }
  
  );

}`我有两个不同的集合,其中包含带有userId的文档列表。我需要使用流比较它们两个并返回两个中都存在的文档。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以使用rx package对Dart Streams具有更多功能,然后可以像这样使用CombineLatestStream.combine2<R, T, S>(Stream<R> r, Stream<T> t, S combiner(A a, B b)

import 'package:rxdart/rxdart.dart';

Stream<DocumentSnapshot> get combined => CombineLatestStream.combine2<FirebaseUser, FirebaseUser, DocumentSnapshot>(
     MyFirebaseStream.document(userId).snapshots(), //or whatever your first stream is
     MyOtherFirebaseStream.document(otherUserId).snapshots(), 
     (documentFirstStream, documentSecondStream) => {
        // Do the logic to extract and return the document that satisfy your condition here 
     }
   );

还有其他方法可以尝试,具体取决于您想要什么,ZipStream.zip2如果要成对比较(每个流的第一个元素,每个流的第二个元素,等等)。

也许有一些代码可以知道您尝试从每个流中返回的确切内容,从而可以帮助您更多