在另一个流中使用一个流颤振

时间:2020-05-26 01:47:44

标签: firebase flutter dart google-cloud-firestore stream

我有一个使用Firebase作为数据库的Flutter项目。我试图通过流获取文档名称列表,将其分成10组,以解决Firebase中.where()函数的最大10个比较问题,然后使用.where()进行批处理请求并合并它们。

我知道的问题是:

  1. friends.length不能作为循环中的数字使用,因为它的类型为Future

  2. 由于我不了解的原因,无法将firestore查询返回添加到流列表中(“参数类型'Query'无法分配给参数类型'Stream'。”)

  3. .where()期望1个位置参数,但我给它3个参数,尽管这是firestore文档所说的我应该做的

  4. StreamGroup未定义

  Stream<List<Memo>> get memos {
    // create list of streams
    List<Stream> streams = [];
    // Get list of friend userids
    var friends = Firestore.instance.collection("users").document(userid).collection("friends").snapshots().map(_snapshotToStringList);
    // split friend userid list into chunks of 10
    for (var i = 0; i < friends.length; i += 10) {
      // query database for each chunk of 10 and add to stream list
      streams.add(Firestore.instance.collection("memos").where("userid", "in", friends.sublist(i, i+10)));
    }
    // merge and return stream list
    return StreamGroup.merge(streams);
  }

任何建议都值得赞赏

1 个答案:

答案 0 :(得分:1)

Stream<List<Memo>> get memos {

List<Stream> streams = [];
Firestore.instance.collection("users").document(userid).collection("friends").snapshots().map(_snapshotToStringList).listen((friends){
                for (var i = 0; i < friends.length; i += 10) {
                  // query database for each chunk of 10 and add to stream list
                  streams.add(Firestore.instance.collection("memos").where("userid", isEqualTo: friends.sublist(i, i+10)));
                }
        });


                return StreamGroup.merge(streams);
              }


use this code