如何在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
相关产品推荐
相关产品推荐

