You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中对Stream<List<Jobs>>按作业类型过滤?

解决方案

方法1:在现有Stream上过滤数据

如果你的streamController中发送的是全量Jobs列表,可通过map操作符对列表做过滤,返回符合transType条件的子列表:

Stream<List<Jobs>> populateJobs(String jType) {
  return streamController.stream.map((jobsList) {
    return jobsList.where((job) => job.transType == jType).toList();
  });
}

补充说明

  • map操作符会把Stream中的每个List<Jobs>转换为过滤后的新列表
  • 若需要模糊匹配(比如transType包含指定字符串),可修改判断逻辑:
    return jobsList.where((job) => job.transType.contains(jType)).toList();
    

方法2:直接用ObjectBox生成过滤后的Stream(更高效)

先全量获取再过滤的方式存在性能浪费,更优的做法是让ObjectBox在查询阶段就完成过滤,直接返回符合条件的流式结果:

// 假设你已初始化ObjectBox的Box<Jobs>实例,命名为jobsBox
Stream<List<Jobs>> populateJobs(String jType) {
  return jobsBox.query(Jobs_.transType.equals(jType))
      .watch(triggerImmediately: true)
      .map((query) => query.find());
}

补充说明

  • Jobs_.transType是ObjectBox自动生成的实体属性引用,用于构建查询条件
  • watch(triggerImmediately: true)会返回一个实时更新的Stream,当数据库中符合条件的数据变化时,Stream会自动推送新结果
  • 若需模糊匹配,可将查询条件改为contains:
    return jobsBox.query(Jobs_.transType.contains(jType))
        .watch(triggerImmediately: true)
        .map((query) => query.find());
    

内容的提问来源于stack exchange,提问作者xdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:07:02