import '../models/bill.dart'; /// 按日期分组的账单 class BillDayGroup { final String date; // yyyy-MM-dd final List bills; final double expenseTotal; // type==1 的合计 final double incomeTotal; // type==2 的合计 const BillDayGroup({ required this.date, required this.bills, required this.expenseTotal, required this.incomeTotal, }); } /// 按 billDate 分组,并分别累计当日支出/收入。 /// /// 后端已按 `billDate DESC, createTime DESC` 排序,Dart 的 Map 保持插入顺序, /// 因此直接顺序遍历累积即可,不要再次排序(否则会打乱同日内的时间顺序)。 List groupBillsByDate(List bills) { final grouped = >{}; for (final bill in bills) { grouped.putIfAbsent(bill.billDate, () => []).add(bill); } return grouped.entries.map((entry) { var expense = 0.0; var income = 0.0; for (final bill in entry.value) { if (bill.isExpense) { expense += bill.absAmount; } else { income += bill.absAmount; } } return BillDayGroup( date: entry.key, bills: entry.value, expenseTotal: expense, incomeTotal: income, ); }).toList(); }