gpt4 book ai didi

flutter - Flutter Firestore查询。我需要从特定索引开始显示订单列表

转载 作者:行者123 更新时间:2023-12-03 03:49:59 24 4
gpt4 key购买 nike

我在Firestore中有一个名为Categories的集合。每个类别都有一个手动添加的索引。当我遍历类别以使用GridView在UI上显示它们时,将按照最初在Firestore中创建类别的方式来选择类别的顺序。
现在是我的代码:
数据库.dart

Future<List<CategoriesModel>> getCategoriesList({String partnerStoreId}) async {
List<CategoriesModel> categories = List();
List<ProductsModel> products = List();

QuerySnapshot snapshot;
// Products
snapshot = await productsCollection
.where('partnerInfo.storeId', isEqualTo: '$partnerStoreId')
.getDocuments();

products = snapshot.documents.map((doc) => ProductsModel.fromSnapshot(doc)).toList();

// Categories
snapshot = await categoriesCollection.getDocuments();
categories =
snapshot.documents.map((doc) => CategoriesModel.fromSnapshot(doc)).toList();


int ind = 0;
categories.forEach((category) {
products.forEach((product) {
if(product.category == category.enId) {
category.productCount = category.productCount + 1;
}
});
categories[ind] = category;

ind++;
});

return categories;
}
在Firestore中,每个类别都有一个称为 ux的键,以及一个名为 index的子键,其中已手动添加了一个数字。
问题:在UI中显示类别时,需要先显示 ux.index = 11,然后显示 ux.index = 3,然后显示其他所有内容。
我正在尝试更改此行:
snapshot = await categoriesCollection.getDocuments();
我正在尝试使用.where,startAt,orderBy等...来查询Firestore。
这是我尝试过的一些示例:
// Here only number 11 is displayed
snapshot = await categoriesCollection.where('ux.index', isEqualTo: 11).getDocuments();

// Here nothing is displayed
snapshot = await categoriesCollection.where('ux.index', isEqualTo: 11).where('ux.index', isEqualTo: 3).getDocuments();

// Nothing is displayed, and even if I use only isLessThanOrEqualTo, the number 11 item is still NOT the first
snapshot = await categoriesCollection.where('ux.index', isLessThanOrEqualTo: 11).where('ux.index', isGreaterThan: 11).getDocuments();
有人可以帮忙吗?此刻让我发疯。
提前致谢

最佳答案

让我解释一下为什么最后两个查询什么都不返回。
使用多个where意味着and,它允许您一次传递多个查询。从字面上看就像query1 and query2 and ...请参阅下面的说明。

// Here nothing is displayed
snapshot = await categoriesCollection.where('ux.index', isEqualTo: 11).where('ux.index', isEqualTo: 3).getDocuments();
因为,您要输入 ux.index == 11 ux.index == 3自然不会返回任何东西。
和这里
snapshot = await categoriesCollection.where('ux.index', isLessThanOrEqualTo: 11).where('ux.index', isGreaterThan: 11).getDocuments();
因为,您要输入 ux.index <= 11 ux.index >= 11因为条件不适用,所以自然不会返回任何内容。
您需要的潜在解决方案:
首先,请更换 snapshot = await categoriesCollection.getDocuments();snapshot = await categoriesCollection.where('ux.index', descending: false).getDocuments();假设 ux.index以0开头,并递增到大于11。
之后,请更换 return categories;使用下面的代码段。

List orderedCategories = List();
// cherry-pick 11 and 3
orderedCategories.add(categories[11]);
categories.removeAt(11);
orderedCategories.add(categories[3]);
categories.removeAt(3);
// add all the rest
orderedCategories.addAll(categories);

return orderedCategories;
nb!这是可以优化的快速解决方案。

关于flutter - Flutter Firestore查询。我需要从特定索引开始显示订单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63828112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com