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

Flutter(Dart)对接Firebase:按日期排序+按类型分组查询求助

解决方案:按日期筛选+按用户ID分组数据

你的Firebase日期范围查询逻辑已经没问题,先补上需要的statusLabel筛选条件,再用Dart的Map实现可靠的分组逻辑,就能满足PDF生成的数据格式需求。

第一步:完善Firestore查询

先打开statusLabel的筛选条件,确保只获取目标状态的数据:

Future<List<JobsData>> getEntry({DateTime? from, DateTime? to}) async {
  try {
    QuerySnapshot<Map<String, dynamic>> _snap = await _firestore
        .collection("applications")
        .where("dateOfApplication", isGreaterThanOrEqualTo: from?.toIso8601String())
        .where("dateOfApplication", isLessThanOrEqualTo: to?.toIso8601String())
        .where("statusLabel", isEqualTo: "Finalized") // 启用状态筛选
        .orderBy("dateOfApplication")
        .get();
    return _snap.docs.map((e) => JobsData.fromJson(e.data())).toList();
  } on FirebaseException catch (e) {
    throw e;
  }
}

第二步:实现分组逻辑

获取到jobsData后,用Map<String, List<JobsData>>按userApliedId分组,因为查询已经按日期排序,分组后每组内的数据会保持日期顺序:

// 假设已获取到jobsData列表
Map<String, List<JobsData>> groupedJobs = {};

for (var job in jobsData) {
  // 若当前用户ID无对应分组,创建空列表
  groupedJobs.putIfAbsent(job.userApliedId, () => []);
  // 将当前job加入对应分组
  groupedJobs[job.userApliedId]!.add(job);
}

更简洁的写法可以用fold方法:

Map<String, List<JobsData>> groupedJobs = jobsData.fold({}, (map, job) {
  map[job.userApliedId] = [...map[job.userApliedId] ?? [], job];
  return map;
});

第三步:转换为PDF所需格式

把分组后的数据转换成二维数组格式,适配PDF排版需求:

// 最终用于PDF的数据集
List<List<dynamic>> pdfData = [];

// 遍历每个分组
groupedJobs.forEach((userId, jobs) {
  // 可添加分组标题(根据PDF格式需求调整)
  pdfData.add(["用户ID: $userId"]);
  
  // 将每个job转换为指定字段数组
  for (var job in jobs) {
    pdfData.add([
      job.imageUrl,
      userId,
      job.date,
      job.Actividad,
      job.customer,
      job.pago,
      job.statusLabel,
      job.jober,
      job.imageUrl.toString().split(" ").first,
    ]);
  }
  
  // 添加分隔行,优化PDF排版
  pdfData.add(["---"]);
});

// 打印验证结果
print(pdfData);

原有代码的问题说明

你之前的循环逻辑存在几个无效点:

  • sorted = jobsData是引用赋值,排序会直接修改原列表
  • sorted[i].userApliedId == sorted[i].userApliedId是恒成立的无效判断
  • 每次循环都重新生成全量datas列表,没有实现真正的分组逻辑

用Map分组的方式可以清晰将同一userApliedId的任务归类,完全匹配你PDF生成的数据要求。

内容的提问来源于stack exchange,提问作者Kevin García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:55:24