首页 > 解决方案 > 如何根据 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,
    };
  }

标签: firebasefluttergoogle-cloud-firestore

解决方案


如果我对您的理解正确,您正在尝试根据多个条件构建查询。每次调用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();
...

推荐阅读