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

如何在Dart/Flutter中对含null/空值对象的列表排序?

解决含null日期字段的列表排序问题

要处理带null日期的列表倒序排序,得覆盖两者都为null、一方为null一方不为null、两者都不为null三种场景,不然还是会出现空指针崩溃。下面分两种常见业务需求给出实现:

场景1:无浏览日期的项排到最后(最新浏览的在前)

myList.sort((a, b) {
  // 两个都没浏览日期,保持原有相对顺序
  if (a.lastVenueViewDate == null && b.lastVenueViewDate == null) return 0;
  // a没浏览日期,b有:a应该排在b后面,返回1让排序器把a往后放
  if (a.lastVenueViewDate == null) return 1;
  // b没浏览日期,a有:b应该排在a后面,返回-1让排序器把b往后放
  if (b.lastVenueViewDate == null) return -1;
  // 都有日期,按倒序(最新的在前)
  return b.lastVenueViewDate!.compareTo(a.lastVenueViewDate!);
});

场景2:无浏览日期的项排到最前面

如果业务上需要把没浏览过的内容优先展示,调整返回值即可:

myList.sort((a, b) {
  if (a.lastVenueViewDate == null && b.lastVenueViewDate == null) return 0;
  // a没浏览日期,优先放前面,返回-1
  if (a.lastVenueViewDate == null) return -1;
  // b没浏览日期,优先放前面,返回1
  if (b.lastVenueViewDate == null) return 1;
  return b.lastVenueViewDate!.compareTo(a.lastVenueViewDate!);
});

为什么你的原修改代码会有问题?

你只处理了b.lastVenueViewDate为null的情况,但没考虑a.lastVenueViewDate为null的场景——当a的字段是null时,a.lastVenueViewDate.compareTo()还是会触发空指针崩溃,所以必须把所有null组合都覆盖到。

内容的提问来源于stack exchange,提问作者Roggie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:35:10