【问题标题】:flutter Sorting arraylist by Date颤动按日期对数组列表进行排序
【发布时间】:2020-10-19 11:53:15
【问题描述】:

在我的 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']));

我期待的结果是 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

【问题讨论】:

  • a['key'] 是什么类型?看起来是String,它解释了奇怪的排序,而不是DateTime
  • @julemand101 是的,它是从 Firebase 数据库读取的子值。你能帮我如何在 DateTime 中排序吗?
  • 需要将a['key']和b['key']解析为DateTime。 api.flutter.dev/flutter/dart-core/DateTime/parse.html

标签: sorting flutter dart flutter-test stream-builder


【解决方案1】:

您需要将Strings 解析为DateTimes。由于 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));

根据你的结构调整它!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 2021-02-23
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多