我有下面的列表,我正试图按日期时间重新排序.

import 'package:intl/intl.dart'; 
//don't forget to add under dependencies pubspec.yml "intl: ^0.15.8"


List products = [];

//adding into the new list from raw API list
for(final item in rawProducts){

   var parsedDate = DateTime.parse.(item['expiryDate']);
   tmpArray = {
     'id': item['id'],
     'name': item['name'],
     'price': item['price'],
     'expiry': parsedDate
   }
   products.add(tmpArray);
  }
}


List products = [

 {id: 1242, name: milk, price: $5, expiry: 2019-11-25 00:00:00:000},
 {id: 1242, name: egg, price: $2, expiry: 2019-11-22 00:00:00:000},
 {id: 1243, name: bread, price: $3, expiry: 2019-11-22 00:00:00:000},
 {id: 1244, name: butter, price: $7, expiry: 2019-11-24 00:00:00:000},
 {id: 1247, name: butter, price: $7, expiry: 2019-11-23 00:00:00:000},

]

我想以最远到期日期最先显示的方式重新排列列表:

 25-11-2019
 24-11-2019
 23-11-2019
 22-11-2019
 22-11-2019

What I have tried (updated) -> SOLVED by changing a.expiry into a['expiry'] :

  products.sort((a,b) {
    var adate = a['expiry'] //before -> var adate = a.expiry;
     var bdate = b['expiry'] //var bdate = b.expiry;
     return -adate.compareTo(bdate);
  });

在排序函数上,我收到此错误(通过上面的修复解决):

Unhandled Exception: NoSuchMethodError: Class 
'_InternalLinkedHashMap<String, dynamic>'has no instance getter 'expiry'.

推荐答案

在上面的示例中,expiryString,而不是DateTime对象.根据你想要实现的目标,你有几个 Select .

最简单的解决方案是使用String的内置compareTo方法,该方法允许对字符串进行排序.这些时间戳已经是可排序的格式,因此这将起作用:

products.sort((a,b) {
    return a.compareTo(b);
 });

或者更简洁:

products.sort((a,b) => a.compareTo(b));

这是非常基本的.与注释中提到的pskink一样,在此基础上可以将字符串转换为实际的DateTime对象.

DateTime expiryAsDateTime = DateTime.parse(expiry);

DateTime还有一个内置的compareTo方法,因此上面的代码片段可以与DateTimes和String一起使用.

如果你想颠倒顺序,只需调换ab即可.

Flutter相关问答推荐

如何解析json中的枚举并忽略 case 敏感性

当第二页在单独的小工具中使用Navigator.pop时,Navigator.push不起作用

Android元数据为1.9.0,预期版本为1.7.1,如何解决flutter应用程序构建失败问题?

为什么Flutter InAppWebView中的DatePicker看起来很旧?

Flutter AppBar Animation反向调试

修复后期变量的抖动皮棉

Flutter 日期时间格式

Ffltter Firebase向用户添加公司

Flutter类调用另一个类中的另一个方法失败

如何在点击查看措辞下方添加句子?

ScaffoldMessenger 在等待键下方不起作用

Flutter:如何在 bottomsheet 中创建一个日期 Select 器,如下图所示

setState 方法有时有效,有时无效

Flutterfire Configure - 未处理的异常和没有 firebase 初始化

应用程序和应用程序内的 webview 之间的单点登录

有什么方法可以将 ChangeNotifier 与 ValueListenableBuilder 一起使用

如何使用列Flutter 中文本占用的空间来控制svg宽度

出现错误;运算符[]不是为对象类型定义的?功能()'

Flutter 在气泡聊天消息上对齐时间戳文本

如何在Flutter 中水平滚动堆叠定位的小部件?