Flatter Firebase如何查询按列表索引排序的集合
我有这个列表,文档ID是字符串; 我想在CloudFireStore中查询一个集合,该集合按照myRecipes列表的顺序返回这些文档Flatter Firebase如何查询按列表索引排序的集合,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有这个列表,文档ID是字符串; 我想在CloudFireStore中查询一个集合,该集合按照myRecipes列表的顺序返回这些文档 List myRecipes= ['N1UXCMR0flbBg6mfvimB','1UXvdsffR0flbBg6mfvimB','mcmXCMR0flbBg6mfvimB']; StreamBuilder( stream: Firestore.instance .collection('recipes')
List myRecipes= ['N1UXCMR0flbBg6mfvimB','1UXvdsffR0flbBg6mfvimB','mcmXCMR0flbBg6mfvimB'];
StreamBuilder(
stream: Firestore.instance
.collection('recipes')
.where(FieldPath.documentId,
whereIn: myLRecipes)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
return GridView.builder(
itemCount: snapshot.data.documents.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (BuildContext context, int index) {
return Text(snapshot.data.documents[index]['recipeName']),
;
});
});
当我运行此程序时,它会按照Firestore的顺序返回配方,但我想返回它们在myRecipes列表中的状态,因此显示的第一个文本小部件将是myRecipes[0]
我也尝试过listen()方法,但它给了我这个错误
类型“\u ForwardingStreamSubscription”不是“Stream”类型的子类型
请帮帮我我已经试了好几天了
List myRecipes= ['N1UXCMR0flbBg6mfvimB','1UXvdsffR0flbBg6mfvimB','mcmXCMR0flbBg6mfvimB'];
StreamBuilder(
stream: Firestore.instance
.collection('recipes')
.where(FieldPath.documentId,
whereIn: myLRecipes)
.snapshots().listen((event) {
event.documents.sort((a, b) {
return a.documentID
.indexOf(myRecipes.first)
.compareTo(myRecipes.last);
});
}),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
return GridView.builder(
itemCount: snapshot.data.documents.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (BuildContext context, int index) {
return Text(snapshot.data.documents[index]['recipeName']),
;
});
});
我尝试了transform,但不知道如何正确使用它。这是我的密码
List myRecipes= ['N1UXCMR0flbBg6mfvimB','1UXvdsffR0flbBg6mfvimB','mcmXCMR0flbBg6mfvimB'];
StreamBuilder(
stream: Firestore.instance
.collection('products')
.where(FieldPath.documentId,
whereIn: snapshot.data.data['favorites'].toList())
.snapshots()
.transform(StreamTransformer.fromBind((event) {
event.listen((event) {
return event.documents.sort((a, b) {
return a.documentID
.indexOf(myRecipes.first)
.compareTo(myRecipes.last);
});
});
})));
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
return GridView.builder(
itemCount: snapshot.data.documents.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (BuildContext context, int index) {
return Text(snapshot.data.documents[index]['recipeName']),
;
});
});
这不会给我一个错误,但它不会返回任何小部件。没有选项按照您在客户端列表中的顺序检索文档。检索完文档后,您必须在应用程序代码中对其重新排序。没有选项可以按照您在客户端列表中的顺序检索文档。检索完应用程序代码中的文档后,您必须对其重新排序。Firebase实时数据库和Cloud Firestore是两个独立的数据库。请仅使用相关标签标记您的问题,而不是同时使用两者。Firebase实时数据库和Cloud Firestore是两个独立的数据库。请仅使用相关标签标记您的问题,而不是同时使用这两个标签。我如何才能做到这一点?如果您使用
listen()
查看snapshots()
,您将获得一个带有。你可以重新排序,然后返回。如果您在我执行此操作时遇到问题,请编辑您的问题以显示您尝试的代码。如果您在执行此操作时遇到问题,请编辑您的问题以显示您尝试的代码。我已经编辑了它(非常感谢您的帮助和耐心!)我想您需要的是转换,而不是倾听,代码将数据从查询快照
转换为列表
。进行排序的代码可以保持不变(假设实际的排序是您想要的),但是您需要返回event.documents.sort(…)
(因此需要使用transform
)…我该如何做呢?如果您收听快照()
,您会得到一个带有。你可以重新排序,然后返回。如果您在我执行此操作时遇到问题,请编辑您的问题以显示您尝试的代码。如果您在执行此操作时遇到问题,请编辑您的问题以显示您尝试的代码。我已经编辑了它(非常感谢您的帮助和耐心!)我想您需要的是转换,而不是倾听,代码将数据从查询快照
转换为列表
。进行排序的代码可以保持不变(假设实际排序是您想要的),但您需要返回event.documents.sort(…)
(因此需要使用transform
)的结果。。