如何在Dart/Flutter中使用可能为null的空对象值对列表进行排序

qv7cva1a  于 2023-06-24  发布在  Flutter
关注(0)|答案(3)|浏览(203)

我遇到过类似的帖子,但没有一个解决我的问题。
我有一个对象列表,我希望根据lastViewDate值从最新到最旧排序,该值可以为null/empty
下面的情况使我的应用崩溃,因为它显然需要lastVenueDate字段的值
myList.sort((a, b) => b.lastVenueViewDate!.compareTo(a.lastVenueViewDate!));
我试图更新我的代码,但卡住了。
myList.sort((a, b) => b.lastVenueViewDate == null ? <what to do here> : b.lastVenueViewDate.compareTo(a.lastVenueViewDate));

ycggw6v2

ycggw6v21#

为了添加更具体的代码,如果你想用nulls对所有的DateTime进行 before 排序,请使用类似这样的代码:

import 'package:collection/collection.dart'; // add to pubspec

final one = DateTime(1); // year 1
myList.sortBy((e) => e.lastVenueViewDate ?? one);

若要在 * 之后设置空值,请将“1”更改为“99999”。
它使用了collection包中的方便的sortBy,这是一个第一方的很酷的包。
(And是的,一个完整的.compareBy可以专门处理空值,但这更容易理解。

fgw7neuy

fgw7neuy2#

常见的做法是将空值与定义的值进行比较,在列表中的第一个或最后一个进行排序。所以在写what to do here的地方返回-1或1。如果a和b都是null,你可以返回0。

rhfm7lfc

rhfm7lfc3#

检查日期的值后,如果为空
可以设置任意默认值。
以便可以将其与列表中的其他值进行比较。
这可以解决你的问题

相关问题