Firebase 扑动火灾中的Firestore动态查询

Firebase 扑动火灾中的Firestore动态查询,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我有一个内容集合,我想在某些情况下应用某些过滤器检索它们 我将筛选器值存储在一个bloc对象中,该值可以为null,也可以不为null。如果为空,则不应应用筛选器;如果有值,则应用筛选器 我想这样做: CollectionReference contents = FirebaseFirestore.instance.collection('content'); if (_bloc.searchQuery != null && _bloc.searchQuery.

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

我将筛选器值存储在一个bloc对象中,该值可以为null,也可以不为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) {
      // ...
    },
  );
CollectionReference内容=
FirebaseFirestore.instance.collection('content');
if(_bloc.searchQuery!=null&&u bloc.searchQuery.isNotEmpty){
//在此处添加where条件
}
if(_bloc.publishUntilQuery!=null){
//在此处添加where条件
}
if(_bloc.publishFromQuery!=null){
//在此处添加where条件
}
返回流生成器(
流:contents.snapshots(),
建设者:
(BuildContext上下文,异步快照){
// ...
},
);
问题是我不知道如何构造类似于查询对象的东西,以便以后将其添加到最终搜索中

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

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

  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) {
      // ...
    },
  );
查询内容=
FirebaseFirestore.instance.collection('content');
if(_bloc.searchQuery!=null&&u bloc.searchQuery.isNotEmpty){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
if(_bloc.publishUntilQuery!=null){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
if(_bloc.publishFromQuery!=null){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
返回流生成器(
流:contents.snapshots(),
建设者:
(BuildContext上下文,异步快照){
// ...
},
);
如中所述,该类继承自该类。此外,用于优化查询的
Query
类中的方法(例如
orderBy()
where()
,等等)返回
查询。因此,您可以使用这些不同的方法来优化初始查询,应用“特定情况下的特定过滤器”,如下所示:

  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) {
      // ...
    },
  );
查询内容=
FirebaseFirestore.instance.collection('content');
if(_bloc.searchQuery!=null&&u bloc.searchQuery.isNotEmpty){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
if(_bloc.publishUntilQuery!=null){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
if(_bloc.publishFromQuery!=null){
contents=contents。其中(“…”,isEqualTo:“…”);//例如,要改编
}
返回流生成器(
流:contents.snapshots(),
建设者:
(BuildContext上下文,异步快照){
// ...
},
);