我已经创建了一个生日提醒应用程序,其中有活动等数据.

现在我想用排序来显示即将到来的生日,并想在列表视图构建器上显示

void main() {


  List<EventModel> events = [
  EventModel(
    title: 'A',
    date: DateTime(1980, 08, 12),
  ),
  EventModel(
  title: 'Z',
  date: DateTime(2020, 12, 28),
  ),
  EventModel(
  title: 'B',
  date: DateTime(1995, 12, 21),
  ),
];
   events.sort((a, b) => (a.date).compareTo(b.date));

   for(var x in events)
     print(x.date.toString());



}

上面的代码给了我输出,因为它正在对包括年在内的整个日期进行排序.如何仅基于月和日进行排序.

1980-08-12 00:00:00.000
1995-12-21 00:00:00.000
2020-12-28 00:00:00.000

我需要以下输出,因为即将到来的生日是这样的

2020-12-28 00:00:00.000
1980-08-12 00:00:00.000
1995-12-21 00:00:00.000


推荐答案

查看@jamesdlin的 comments 有助于解决您的问题

我已经创建了一个名为IgnreYear的方法,它返回一个忽略年份的日期,它将判断日期是在今天的日期之前还是之后……

这是你的解决方案..

您可能会得到一些专家代码,但这里是基本代码.

DateTime ignoreYear(DateTime date) {
  final now = DateTime.now();
  var today = DateTime.utc(now.year, now.month, now.day);
  var next = DateTime.utc(today.year, date.month, date.day);

  if (next.isBefore(today)) {
    next = next.copyWith(year: today.year + 1);
  }
  return next;
}

void main() {
  events.sort((a, b) => ignoreYear(a.date).compareTo(ignoreYear(b.date)));

  for (var x in events) print(x.date.toString());
}

所有学分都到了jamesdlin

Flutter相关问答推荐

如何更改ElevatedButton的 colored颜色 以按下它?

如何防止alert 对话框在收到通知时出现在某个flutter页面中

我如何才能收到每天重复的预定通知?

ProviderContainer和GoRouter

允许冻结在初始化时使用工厂

缩短经常使用的行Theme.of(context).colorScheme

在选项卡栏视图中搜索和筛选不起作用

导航回上一页会将我带回Ffltter应用程序中的登录页面

如何在Flutter中制作弯曲文本

Flutter:如何在 Future 函数上添加网络判断和 showDialog

Dart/Flutter 泛型:类型 '(SearchFilterItemModel) => String' 不是类型 '(SearchFilterItemModel) => String' 的子类型

如何使Flutter 边框宽度在外面而不是在里面?

Flutter 使用扩展的 TextField 定位小部件

Riverpod 注册多少个 providers

Flutter: pie_chart 插件动画滚动问题

Dart 撕掉 const 构造函数

什么最接近 Dart 的 List.asMap().forEach() 返回列表?

在不丢失游戏状态的情况下从 Flame 游戏导航到 Flutter 小部件

RangeError(索引):无效值:有效值范围为空:点击文章时为0

单击列表视图导航到 Flutter 中的另一个页面