【问题标题】:How to Sort List based on custom Date Dart如何根据自定义 Date Dart 对列表进行排序
【发布时间】: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 回调错误。它必须d1d2 进行比较,而不是将d1 与其他日期进行比较。否则,sort() 不能相对于d2 正确排序d1。如果您想删除截止日期之前的所有日期,最好使用expenseData.where((dateTime) => dateTime.compareTo(firstDayOfMonth) >= 0) 过滤您的列表并然后对其进行排序。
  • 没有显示任何错误,因为问题是我的过滤问题我明白了,谢谢您的提示

标签: list flutter sorting datetime dart


【解决方案1】:

这是对您的排序方法的修复。我制作了一些DateTime 演员表,因为我的expenseData 被格式化为Map<String, dynamic>

void pieDatathisMonth() {
  var now = DateTime.now();
  var firstDayMonth = DateTime(now.year, now.month, 1);
  var sortExpData = List<Map<String, dynamic>>.from(expenseData);
  
  // remove all data before firstday because you don't need to sort them.
  sortExpData.removeWhere((e) => (e['date'] as DateTime).isBefore(firstDayMonth));
  
  sortExpData.sort((d1, d2) {
    return (d1['date'] as DateTime).compareTo(d2['date'] as DateTime);
  });
  sortExpData.toList();
  thisMonthExpense.addAll(sortExpData);
  update();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多