我有一个使用Firebase作为数据库的Flutter项目。我试图通过流获取文档名称列表,将其分成10组,以解决Firebase中.where()函数的最大10个比较问题,然后使用.where()进行批处理请求并合并它们。>
我知道的问题是:
friends.length不能作为循环中的数字使用,因为它的类型为Future
由于我不了解的原因,无法将firestore查询返回添加到流列表中(“参数类型'Query'无法分配给参数类型'Stream'。”)
.where()期望1个位置参数,但我给它3个参数,尽管这是firestore文档所说的我应该做的
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);
}
任何建议都值得赞赏
答案 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