【发布时间】:2026-02-19 16:50:01
【问题描述】:
我正在尝试在 Zillow 应用程序中实现多过滤器功能。我正在使用 Flutter、Firebase 和 Provider Package。
用户可以按价格范围、区域范围、城市、邮政编码、浴室、卧室和便利设施进行过滤。 用户可以选择任何过滤器组合。 当使用组合计算时,我最终得到了 127 个组合?
- 是否有任何有效的方法来获取每个组合的查询?
- 对于大量查询,Looping 或 Switch 语句是否是良好的代码实践?
Future<void> getApartmentbyCityPrice(PersonalHomeList personalApartmentList,String city,double
maxPrice, double minPrice) async {
if (city == "Any" && maxPrice != null && minPrice != null) {
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').
where("price",isGreaterThanOrEqualTo: minPrice, isLessThanOrEqualTo: maxPrice).get();
List<PersonalApartment> _loadedPersonalApartment = [];
snapshot.docChanges.forEach((result) {
PersonalApartment personalApartment = new PersonalApartment(
id: result.doc['id'],
userId: result.doc['userId'],
amenities: result.doc['amenities'],
area: result.doc['area'],
bathroom: result.doc['bathroom'],
bedroom: result.doc['bedroom'],
city: result.doc['city'],
createdAt: result.doc['createdAt'],
description: result.doc['description'],
imageUrl: result.doc['imageUrl'],
price: result.doc['price'],
streetName: result.doc['streetName'],
updatedAt: result.doc['updatedAt'],
zipcode: result.doc['zipcode'],
);
_loadedPersonalApartment.add(personalApartment);
});
personalApartmentList.apartmentListByCity = _loadedPersonalApartment;
} else if (city.isNotEmpty && city != "Any" && maxPrice == 0.0 && minPrice == 0.0) {
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments')
.where("city", isEqualTo: city).get();
List<PersonalApartment> _loadedPersonalApartment = [];
snapshot.docChanges.forEach((result) {
PersonalApartment personalApartment = new PersonalApartment(
id: result.doc['id'],
userId: result.doc['userId'],
amenities: result.doc['amenities'],
area: result.doc['area'],
bathroom: result.doc['bathroom'],
bedroom: result.doc['bedroom'],
city: result.doc['city'],
createdAt: result.doc['createdAt'],
description: result.doc['description'],
imageUrl: result.doc['imageUrl'],
price: result.doc['price'],
streetName: result.doc['streetName'],
updatedAt: result.doc['updatedAt'],
zipcode: result.doc['zipcode'],
);
_loadedPersonalApartment.add(personalApartment);
});
personalApartmentList.apartmentListByCity = _loadedPersonalApartment;
} else {
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').where("city",
isEqualTo: city).where("price",isGreaterThanOrEqualTo: minPrice, isLessThanOrEqualTo: maxPrice)
.get();
List<PersonalApartment> _loadedPersonalApartment = [];
snapshot.docChanges.forEach((result) {
PersonalApartment personalApartment = new PersonalApartment(
id: result.doc['id'],
userId: result.doc['userId'],
amenities: result.doc['amenities'],
area: result.doc['area'],
bathroom: result.doc['bathroom'],
bedroom: result.doc['bedroom'],
city: result.doc['city'],
createdAt: result.doc['createdAt'],
description: result.doc['description'],
imageUrl: result.doc['imageUrl'],
price: result.doc['price'],
streetName: result.doc['streetName'],
updatedAt: result.doc['updatedAt'],
zipcode: result.doc['zipcode'],
);
_loadedPersonalApartment.add(personalApartment);
});
personalApartmentList.apartmentListByCity = _loadedPersonalApartment;
}
}
示例查询示例
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').where("price",
isGreaterThanOrEqualTo: minPrice, isLessThanOrEqualTo: maxPrice).get();
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').where("area",
isGreaterThanOrEqualTo: areaRange.start, isLessThanOrEqualTo: areaRange.end).get();
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').
where("bathroom", arrayContainsAny: bathroom).get();
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('apartments').where("bedroom",
arrayContainsAny: bedroom).get();
过滤屏幕
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore