在对解码后的json进行排序时得到一个错误:
已发生异常。_TypeError (动态的,动态的) => dynamic‘不是’(动态的,动态的) => int‘的一个子类型。
json看起来如下:https://imgur.com/a/BdU3THE
我猜sort()在主体中有一个compareTo,它返回int (-1,1),这是‘动态的,动态的) => int’部分,而解码的json是一个默认的动态的‘动态的,动态的) =>动态的映射,所以我需要转换一些东西。但是,我看不到代码中的哪个函数正在返回一个动态函数?或者即使这就是问题所在?
if (localData != null && localData["articles"] != null) {
the error occurs on the next line:
localData["articles"].toList().sort((a, b) =>
a["publishedAt"] != null && b["publishedAt"] != null
? b["publishedAt"].compareTo(a["publishedAt"])
: null);
}发布于 2019-05-07 05:37:15
我为您创建了一个示例,其中有类别列表,并添加了publishedAt字段对其进行排序。
这是json:
{
"Categories": [
{
"id": 1,
"name": "Restruants",
"publishedAt": "2019-05-07T00:36:38Z",
},
{
"id": 2,
"name": "Car Rental",
"publishedAt": "2019-06-07T00:36:38Z",
},
{
"id": 3,
"name": "Furniture",
"publishedAt": "2019-12-21T00:36:38Z",
},
{
"id": 4,
"name": "cars",
"publishedAt": "2019-08-10T00:36:38Z",
},
{
"id": 5,
"name": "Maintenance",
"publishedAt": "2019-03-15T00:36:38Z",
},
{
"id": 6,
"name": "Education",
"publishedAt": "2019-09-17T00:36:38Z",
},
{
"id": 7,
"name": "Finess",
"publishedAt": "2019-01-28T00:36:38Z",
},
{
"id": 8,
"name": "Electronics",
"publishedAt": "2019-09-19T00:36:38Z",
},
{
"id": 9,
"name": "Medical",
"publishedAt": "2019-12-25T00:36:38Z",
},
{
"id": 10,
"name": "Entirtainment",
"publishedAt": "2019-06-14T00:36:38Z",
}
]
}下面是模型类,当我们从json获取数据时,可以在这个类中找到排序方法。
您可以看到以注释开头的方法"//使用publishedAt对数组进行排序“
class ItemModel {
List<Category> categories;
ItemModel({
this.categories,
});
factory ItemModel.fromJson(Map<String, dynamic> json){
var accJson = json["Categories"] as List;
List<Category> accList = accJson.map((i) => Category.fromJson(i)).toList();
// TO SORT ARRAY WITH publishedAt
accList.sort((a, b) {
return a.publishedAt.compareTo(b.publishedAt);
});
return ItemModel(
categories: accList
);
}
Map<String, dynamic> toJson() => {
"Categories": new List<dynamic>.from(categories.map((x) => x.toJson())),
};
}
class Category {
int id;
String name;
String publishedAt;
IconPath iconPath;
Category({
this.id,
this.name,
this.publishedAt,
this.iconPath,
});
factory Category.fromJson(Map<String, dynamic> json) => new Category(
id: json["id"],
name: json["name"],
publishedAt: json["publishedAt"],
iconPath: iconPathValues.map[json["iconPath"]],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"publishedAt": publishedAt,
"iconPath": iconPathValues.reverse[iconPath],
};
}下面是将静态json文件从资产中获取列表的未来类,它将给出排序结果,因为我们已经在"fromJson“方法中对其进行排序了:
Future<ItemModel> fetchMovieList(BuildContext context) async {
final jsonCategory = await DefaultAssetBundle
.of(context)
.loadString('assets/CategoryList.json');
Map<String, dynamic> values = Map<String, dynamic>.from(jsonDecode(jsonCategory));
final mapJsonCategory = Map<String, dynamic>.from(values);
print(mapJsonCategory);
return ItemModel.fromJson(mapJsonCategory);
}希望它有帮助:)
https://stackoverflow.com/questions/56015160
复制相似问题