未处理的异常:类型“List<dynamic>”不是 dart/flutter 中“Map<String, dynamic>”类型的子类型
Posted
技术标签:
【中文标题】未处理的异常:类型“List<dynamic>”不是 dart/flutter 中“Map<String, dynamic>”类型的子类型【英文标题】:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' in dart/ flutter 【发布时间】:2021-12-29 07:34:57 【问题描述】:我可以解码来自服务器的响应,但我不知道这是什么错误:\
这是我在 showproduct 类中的请求代码:
if (response.statusCode == 200)
setState(()
var bodybytedecoded= jsonDecode(utf8.decode(response.bodyBytes));
final product= ProductModel.fromJson(bodybytedecoded); // console shows error come from this line
print(product);
);
else
print(response.reasonPhrase);
在我的模型类中,我有:
class ProductModel
final int id;
final String name;
final String regular_price;
final String description;
final List<ImageModel> image;
ProductModel( required this.id,required this.name,required this.regular_price, required this.description,required this.image);
factory ProductModel.fromJson(Map<String,dynamic> json)
final name = json["name"];
final id = json ["id"];
final regular_price = json["regular_price"];
final description = json["description"];
final image = json["image"];
return ProductModel(id: id, name: name, regular_price: regular_price, description: description, image: image);
Map<String,dynamic> toJson()
final Map<String, dynamic> data = new Map<String, dynamic>();
data["id"] = this.id;
data["name"] = this.name;
data["regular_rice"] = this.regular_price;
data["description"] = this.description;
data["image"] = this.image;
return data;
class ImageModel
final String src;
ImageModel(required this.src);
factory ImageModel.fromJson(Map<String,dynamic> json )
return ImageModel(src: json["src"]);
我不知道这个错误是为了什么,我的模型类有什么问题吗?还是我的要求? 如果有人能告诉我一个真正的方法,我将不胜感激。
这是完整的错误:
E/flutter (31338): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
E/flutter (31338): #0 _ShowProductState.FetchItems.<anonymous closure> (package:mystore/ProductPages/showproduct.dart:219:46)
E/flutter (31338): #1 State.setState (package:flutter/src/widgets/framework.dart:1088:30)
E/flutter (31338): #2 _ShowProductState.FetchItems (package:mystore/ProductPages/showproduct.dart:215:7)
E/flutter (31338): <asynchronous suspension>
E/flutter (31338):
这是来自服务器的 json 正文:
[
"id": 56012,
"name": "a name",
"slug": "a slug",
"description": "<p>آب آشامیدنی پیورلایف 1/5 لیتری نستله</p>\n",
"regular_price": "45000",
"sale_price": "45000",
"tags": [],
"images": [
"id": 56043,
"src": "pic link",
"name": "A name",
],
,
]
【问题讨论】:
请发布完整的错误消息,包括堆栈跟踪。它应该指出代码中的问题所在。此外,如果您发布了一个您尝试解析的 JSON 示例,那就太好了,因为错误表明 JSON 和模型之间的类型不匹配。 你在bodybytedecoded变量中解码json后得到一个列表吗? @julemand101 当然,我编辑了。 @Diwyansh 是的,我愿意,而且图像是一个列表。 您的响应返回的是列表还是对象? 【参考方案1】:将此行添加到您的 ProductModel
List<ProductModel> productFromJson(String str) => List<ProductModel>.from(jsonDecode(str).map((x) => ProductModel.fromJson(x)));
并将您的代码更改为这样
if (response.statusCode == 200)
setState(()
var bodybytedecoded= jsonDecode(utf8.decode(response.bodyBytes));
final product= productFromJson(bodybytedecoded); // console shows error come from this line
print(product);
);
else
print(response.reasonPhrase);
【讨论】:
【参考方案2】:问题是您正在尝试将列表映射到地图将此行更改为
final product= ProductModel.fromJson(bodybytedecoded);
到
var bodybytedecoded= jsonDecode(utf8.decode(response.bodyBytes));
final List<ProductModel> products = bodybytedecoded
.map((model) => ProductModel.fromJson(model));
顺便说一句,toJson
中有一个错字
data["regular_rice"] = this.regular_price;
【讨论】:
控制台显示此错误:Unhandled Exception: type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'List<ProductModel>'
@NavidShokoufeh 请使用 http 请求方法更新主帖。我相信 utf8.decode 不仅需要jsonDecode(response.body)
【参考方案3】:
您可以通过解码数据并将值存储在列表中来简单地做到这一点。
var decodedResponse= jsonDecode(resonse.body);
List<ProductModel> items=[];
decodedResponse.forEach((e)
items.add(ProductModel.fromJson(e));
);
【讨论】:
点击链接gist.github.com/Jahidul007/98e5ea1107fb9dca0bb7809f558776d4以上是关于未处理的异常:类型“List<dynamic>”不是 dart/flutter 中“Map<String, dynamic>”类型的子类型的主要内容,如果未能解决你的问题,请参考以下文章
未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型
Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter
未处理的异常:类型“List<dynamic>”不是“List<CustomerTransactionDetail>”类型的子类型
未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复]
未处理的异常:类型“ImmutableMap<String, dynamic>”不是类型转换中“List<dynamic>”类型的子类型
未处理的异常:类型“List<dynamic>”不是 dart/flutter 中“Map<String, dynamic>”类型的子类型