【发布时间】:2020-02-17 22:55:27
【问题描述】:
在 ListView(或类似小部件)上排序列表的最佳方法是什么?
我正在使用table_calendar 在日历上显示事件,因此我需要按日期订购不同的事件(该字段已为每个事件创建)。
【问题讨论】:
标签: flutter
在 ListView(或类似小部件)上排序列表的最佳方法是什么?
我正在使用table_calendar 在日历上显示事件,因此我需要按日期订购不同的事件(该字段已为每个事件创建)。
【问题讨论】:
标签: flutter
final items = List.generate(10, (index) => index + 1);
void order() {
final ascending = items[0] > items[1];
setState(() {
if (ascending) {
items.sort();
} else {
items.sort((a, b) => b - a);
}
});
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: items.length + 1,
itemBuilder: (context, index) {
if (index == items.length) {
return FlatButton(
onPressed: order,
child: Text("Order"),
);
}
return Center(child: Text("Entry ${items[index]}"));
});
}
【讨论】:
ListView 中没有这样的按字段排序的方法,但我只是想知道是否可以避免额外的工作(也许我只是想多了,因为这对应用程序来说并没有太多的工作)
下面的示例显示了如何按升序或降序排列日期列表:
final list = [
DateTime.now(),
DateTime.now().subtract(Duration(days: 1)),
DateTime.now().subtract(Duration(days: 2)),
DateTime.now().subtract(Duration(days: 3)),
];
//Order By Descending
list.sort((a, b) => a.isAfter(b) ? -1 : 1);
//Order By Ascending
list.sort((a, b) => a.isBefore(b) ? -1 : 1);
for (var item in list) {
print(item);
}
排序可用于任何集合,用于比较日期字段的事件列表
【讨论】: