Flutter项目中如何按Cloud Firestore文档字段值过滤Stream数据流
修改方案
你可以给getEventos方法增加可选的过滤参数,配合Firestore的where查询条件实现动态过滤,不传过滤参数时依然保留原有全量拉取的能力:
// 增加可选的interes过滤参数,默认null时拉取全量数据 Stream<List<Evento>> getEventos({String? interesFilter}){ var query = _db.collection('eventos'); // 当传入过滤参数时追加where条件 if (interesFilter != null) { query = query.where('interes', isEqualTo: interesFilter); } return query .snapshots() .map((snapshot) => snapshot.docs .map((doc) => Evento.fromJson(doc.data())) .toList()); }
使用示例
- 拉取全量数据:直接调用
getEventos()即可,和原有逻辑完全兼容 - 仅拉取interes为bares的文档:调用
getEventos(interesFilter: 'bares') - 仅拉取interes为restaurantes的文档:调用
getEventos(interesFilter: 'restaurantes')
拓展场景(多值匹配)
如果需要同时匹配多个interes取值(比如同时查询bares和restaurantes两类数据),可以修改参数为列表类型,使用whereIn条件实现:
Stream<List<Evento>> getEventos({List<String>? interesList}){ var query = _db.collection('eventos'); if (interesList != null) { query = query.where('interes', whereIn: interesList); } return query .snapshots() .map((snapshot) => snapshot.docs .map((doc) => Evento.fromJson(doc.data())) .toList()); } // 调用示例 getEventos(interesList: ['bares', 'restaurantes'])
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

