【发布时间】:2021-09-10 09:41:48
【问题描述】:
我有以下函数可以根据日期对列表进行排序,但如果 DateTime 在第一天之前它会创建双列表
我想要的是根据每月的第一天对列表进行排序并在第一天之前删除所有项目
List expenseData= [
{id: 1242, detail: milk, amount: $5, date: 2021-06-21 00:00:00:000},
{id: 1242, detail: egg, amount: $2, date: 2021-05-15 00:00:00:000},
{id: 1243, detail: bread, amount: $3, date: 2021-05-13 00:00:00:000},
{id: 1244, detail: butter, amount: $7, date: 2021-05-22 00:00:00:000},
{id: 1247, detail: butter, amount: $7, date: 2021-06-10 00:00:00:000},
];
pieDatathisMonth() {
var now = DateTime.now();
var firstDayMonth = DateTime(now.year, now.month, 1);
var sortExpData = expenseData;
sortExpData.sort((d1, d2) {
return d1.date.compareTo(firstDayMonth);
});
sortExpData.toList();
thisMonthExpense.addAll(sortExpData);
update();
}
【问题讨论】:
-
错误是什么?
-
您的
sort回调错误。它必须将d1与d2进行比较,而不是将d1与其他日期进行比较。否则,sort()不能相对于d2正确排序d1。如果您想删除截止日期之前的所有日期,最好使用expenseData.where((dateTime) => dateTime.compareTo(firstDayOfMonth) >= 0)过滤您的列表并然后对其进行排序。 -
没有显示任何错误,因为问题是我的过滤问题我明白了,谢谢您的提示
标签: list flutter sorting datetime dart