【问题标题】:Firestore dynamic querying in Flutter FireFlutter Fire 中的 Firestore 动态查询
【发布时间】:2020-12-28 16:40:21
【问题描述】:

我有一个内容集合,我想在某些情况下应用某些过滤器来检索它们。

我将过滤器值存储在一个 bloc 对象中,该值可以为空或不为空。如果为 null,则不应用过滤器,如果有值,则应用过滤器。

我想做这样的事情:

  CollectionReference contents =
    FirebaseFirestore.instance.collection('content');

  if (_bloc.searchQuery != null && _bloc.searchQuery.isNotEmpty) {
    // Add where criteria here
  }

  if (_bloc.publishUntilQuery != null) {
    // Add where criteria here
  }

  if (_bloc.publishFromQuery != null) {
    // Add where criteria here
  }

  return StreamBuilder<QuerySnapshot>(
    stream: contents.snapshots(),
    builder:
        (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      // ...
    },
  );

问题是我不知道如何构造类似 Query 对象的东西,以便以后将其添加到最终搜索中。

如何解决这个问题?非常感谢。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    doc 中所述,CollectionReference 类继承自 Query 类。此外,Query 类中用于优化查询的方法(例如 orderBy()where() 等)返回 Query。因此,您可以使用这些不同的方法来优化您的初始查询,应用“某些情况下的某些过滤器”,如下所示:

      Query contents =
        FirebaseFirestore.instance.collection('content');
    
      if (_bloc.searchQuery != null && _bloc.searchQuery.isNotEmpty) {
        contents = contents.where('....', isEqualTo: '....');  // For example, to be adapted
      }
    
      if (_bloc.publishUntilQuery != null) {
        contents = contents.where('....', isEqualTo: '....');  // For example, to be adapted
      }
    
      if (_bloc.publishFromQuery != null) {
        contents = contents.where('....', isEqualTo: '....');  // For example, to be adapted
      }
    
      return StreamBuilder<QuerySnapshot>(
        stream: contents.snapshots(),
        builder:
            (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          // ...
        },
      );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2018-08-02
      • 2019-04-08
      • 1970-01-01
      • 2021-10-01
      • 2019-11-02
      • 2023-03-09
      相关资源
      最近更新 更多