【发布时间】:2019-11-21 19:40:54
【问题描述】:
我有以下列表,我正在尝试按日期时间重新排序/排序。
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
我尝试过的(更新)-> 通过将 a.expiry 更改为 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'.
【问题讨论】:
-
见
DateFormat.parse方法 -
谢谢,我在分配给产品之前已经解析了日期,请看上面的更新
-
final format = DateFormat('yyyy-M-d H:m:s:S'); final array = [ '2019-11-24 00:00:00:000', '2019-11-22 00:00:00:000', '2019-11-23 00:00:00:000', '2019-11-25 00:00:00:000', '2019-11-22 00:00:00:000', ]; array.map(format.parse).toList() ..sort((a, b) => -a.compareTo(b)) ..forEach(print); -
谢谢@pskink,似乎错误实际上来自试图获取
expiry的排序方法抛出此错误:Unhandled Exception: NoSuchMethodError: Class '_InternalLinkedHashMap<String, dynamic>' has no instance getter 'expiry' -
谢谢@pskink,是的,我做到了,我收到此错误“没有 getter 'expiry' 实例,请参阅上述问题的最后一部分。