Sorting 颤振排序阵列列表(按日期)

Sorting 颤振排序阵列列表(按日期),sorting,flutter,dart,flutter-test,stream-builder,Sorting,Flutter,Dart,Flutter Test,Stream Builder,在我的streamBuilder中,我的数组列表包含具有格式(dd-MM-yyyy)的日期。 我想把名单按升序排列。 获取Datasnapshot后我在StreamBuilder中使用的代码 Map<dynamic, dynamic> data = snap.data.snapshot.value; List item = []; data.forEach( (index, data) =

在我的streamBuilder中,我的数组列表包含具有格式(dd-MM-yyyy)的日期。 我想把名单按升序排列。 获取Datasnapshot后我在StreamBuilder中使用的代码

 Map<dynamic, dynamic> data = snap.data.snapshot.value;

              List item = [];
              data.forEach(
                  (index, data) => item.add(
                      {"key": index, ...data}
                      )
              );
              item..sort((a,b)=>a['key'].compareTo(b['key']));
Map data=snap.data.snapshot.value;
列表项=[];
data.forEach(
(索引,数据)=>item.add(
{“key”:索引,…数据}
)
);
项..排序((a,b)=>a['key'])。与(b['key'])比较;
我期待的结果是 16-06-2020 17-06-2020 18-06-2020 19-06-2020 22-06-2020 04-07-2020

我得到的结果是 04-07-2020 16-06-2020 17-06-2020 18-06-2020 19-06-2020
22-06-2020

您需要将
字符串
s解析为
DateTime
s。由于DateTime
parse()
方法不接受您提供的格式的字符串,因此可以执行以下操作:

List<String> strings = ['04-07-2020', '17-06-2020', '16-06-2020', '19-06-2020', '18-06-2020', '22-06-2020'];
List<DateTime> dateTimes = [];
  
strings.forEach((string) {
  var splitted = string.split('-');
  var day = splitted[0];
  var month = splitted[1];
  var year = splitted[2];
  var formatted = '$year-$month-$day';
  dateTimes.add(DateTime.parse(formatted));
});
  
dateTimes.sort((a, b) => a.compareTo(b));
列表字符串=['04-07-2020'、'17-06-2020'、'16-06-2020'、'19-06-2020'、'18-06-2020'、'22-06-2020';
列表日期时间=[];
strings.forEach((string){
var splitted=string.split('-');
var日=拆分的[0];
var月=拆分的[1];
风险值年=拆分[2];
var格式=“$year-$month-$day”;
add(DateTime.parse(格式化));
});
排序((a,b)=>a.compareTo(b));

只需根据您的结构进行调整即可

您需要将
字符串
s解析为
DateTime
s。由于DateTime
parse()
方法不接受您提供的格式的字符串,因此可以执行以下操作:

List<String> strings = ['04-07-2020', '17-06-2020', '16-06-2020', '19-06-2020', '18-06-2020', '22-06-2020'];
List<DateTime> dateTimes = [];
  
strings.forEach((string) {
  var splitted = string.split('-');
  var day = splitted[0];
  var month = splitted[1];
  var year = splitted[2];
  var formatted = '$year-$month-$day';
  dateTimes.add(DateTime.parse(formatted));
});
  
dateTimes.sort((a, b) => a.compareTo(b));
列表字符串=['04-07-2020'、'17-06-2020'、'16-06-2020'、'19-06-2020'、'18-06-2020'、'22-06-2020';
列表日期时间=[];
strings.forEach((string){
var splitted=string.split('-');
var日=拆分的[0];
var月=拆分的[1];
风险值年=拆分[2];
var格式=“$year-$month-$day”;
add(DateTime.parse(格式化));
});
排序((a,b)=>a.compareTo(b));

只需根据您的结构进行调整即可

将数据存储为Firebase中的时间戳将使其更加简单,然后您可以按此时间戳对其进行排序。
如果您需要格式化为字符串的日期(dd-MM-yyyy),您可以将其解析为Datetime,并使用Intl包将其转换为格式化字符串。

将数据存储为Firebase中的时间戳将使其更加简单,然后您可以按此时间戳对其进行排序。
如果您需要格式化为字符串的日期(dd-MM-yyyy),您可以将其解析为Datetime,并使用Intl包将其转换为格式化字符串。

什么类型的
a['key']
?它看起来像是一个
字符串
,解释了奇怪的排序,而不是
日期时间
?@julemand101是的,它是从Firebase数据库读取的子值。你能帮我如何在DateTime中排序吗?你需要将a['key']和b['key']解析为DateTime。什么类型的[code>a['key']?它看起来像是一个
字符串
,解释了奇怪的排序,而不是
日期时间
?@julemand101是的,它是从Firebase数据库读取的子值。你能帮我如何在DateTime中排序吗?你需要将a['key']和b['key']解析为DateTime。