firebase - 如何根据 firebase 字符串在 List 上创建动态过滤器?
问题描述
我正在尝试使用firestore中的字符串包含一个动态过滤器。UI 将根据过滤器上的选择显示图块
我有查询以获取下面的 Firebase 文档
getFoods(FoodNotifier foodNotifier) async {
QuerySnapshot snapshot = await Firestore.instance
.collection('Foods')
.orderBy('create at', descending: true)
.getDocuments();
List<Food> _foodList = [];
下面是我在firestore中设置的字符串。
import 'package:cloud_firestore/cloud_firestore.dart';
class Food {
String id;
String name;
String category;
String newcategory;
String image;
List subIngredients = [];
Timestamp createdAt;
Timestamp updatedAt;
static var data;
Food();
Food.fromMap(Map<String, dynamic> data) {
id = data['id'];
name = data['name'];
category = data['category'];
newcategory = data['newcategory'];
image = data['image'];
subIngredients = data['subIngredients'];
createdAt = data['create at'];
updatedAt = data['updatedAt'];
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'category': category,
'newcategory': newcategory,
'image': image,
'subIngredients': subIngredients,
'create at': createdAt,
'updatedAt': updatedAt,
};
}
解决方案
如果我对您的理解正确,您正在尝试根据多个条件构建查询。每次调用where
它都会返回一个新Query
对象。因此,通过为每个条件调用它,您可以构建查询。
var query = Firestore.instance
.collection('Foods')
.orderBy('create at', descending: true);
if (food.category != "") {
query = query.where("category", isEqualTo: food.category);
}
if (food.name != "") {
query = query.where("name", isEqualTo: food.name);
}
QuerySnapshot snapshot = await query.getDocuments();
...
推荐阅读
- python - ModuleNotFoundError:即使已安装并运行,Django 中也没有名为“django_celery_beat”的模块
- textures - Blender 2.90.1 中插件 Botaniq 的问题
- vagrant - MacOS Monteray更新后运行Vagrant时VirtualBox上的`VBoxManage`错误
- node.js - 在终止函数之前等待 websocket 连接
- python - 将列添加到 pandas DF,根据同一 DF 中其他两列的值在 DF 中进行查找
- azure - 在 Jenkins 中禁用 SSO 用户
- reactjs - Redux 类组件和路由
- row - 带标识符的行到列
- html - HTML/CSS 定位问题/Divs 碰撞
- javascript - Discord bot:嵌入消息中的随机图像