_TypeError(类型 'List<dynamic>' 不是类型 'Map<String, dynamic> 的子类型
Posted
技术标签:
【中文标题】_TypeError(类型 \'List<dynamic>\' 不是类型 \'Map<String, dynamic> 的子类型【英文标题】:_TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>_TypeError(类型 'List<dynamic>' 不是类型 'Map<String, dynamic> 的子类型 【发布时间】:2021-02-25 09:45:36 【问题描述】:需要您帮助解决 Flutter 中的此错误...以及如何在其他屏幕上使用此回调的实例?
这是我的 message.json 数据模型
[
"title": "Title 1",
"body": "Lorem ipsum dolor sit amet. "
,
"title": "Title 1",
"body": "Lorem ipsum dolor sit amet. "
,
]
我的 message_model.dart
class MessagesList
final List<Message> messages;
MessagesList(this.messages);
factory MessagesList.fromJson(List<dynamic> parsedJson)
List<Message> messages = List<Message>();
messages = parsedJson.map((e) => Message.fromJson(e)).toList();
return MessagesList(messages);
class Message
final String title;
final String body;
Message(this.title, this.body);
factory Message.fromJson(Map<String, dynamic> json)
return Message(
json['title'].toString(),
json['body'].toString(),
);
这是我的 message_services.dart
_TypeError(类型 'List' 不是类型 'Map
' 的子类型)在 loadMessage 函数中(第 3 行 - fromJson 方法)。为什么?
Future<String> _loadMessageAsset() async
return await rootBundle.loadString("./data/message.json");
Future loadMessage() async
String jsonMessage = await _loadMessageAsset();
final jsonResponse = jsonDecode(jsonMessage);
Message message = Message.fromJson(jsonResponse);
print("Message -- " + message.title);
【问题讨论】:
你从哪里得到这个错误,在哪一行?您正在尝试从该地图中获取列表?地图只有字符串和动态类型对象,没有列表类型.. 第3行抛出错误-"Message.fromJson(jsonResponse)" 【参考方案1】:messagejson 返回 JSON 数组而不是 json 对象,因此是 List 而不是 Map。
Future loadMessage() async
String jsonMessage = await _loadMessageAsset();
Iterable jsonResponse = json.decode(jsonMessage);
List<Message > Message = List<Message >.from(jsonResponse ).map((Map model)=>
Message .fromJson(model)).toList();
print("Message -- " + message[0].title);
【讨论】:
尝试了您的推荐,但以类型错误为准!!【参考方案2】:模型中旋转列表的方法错误。你能纠正一下吗。仔细看就明白了。
MessagesList MessagesList FromJson(String str) => MessagesList
.fromJson(json.decode(str));
String MessagesList ToJson(MessagesList data) => json.encode(data.toJson());
class MessagesList
List<Message> flyForData;
MessagesList (
this.messages,
);
////////////this wrong
factory MessagesList .fromJson(Map<String, dynamic> json) => MessagesList (
messages: List<Message>.from(
json["messages"].map((x) => Message.fromJson(x))),
); ////////////this wrong
Map<String, dynamic> toJson() =>
"messages": List<dynamic>.from(messages.map((x) => x.toJson())),
;
class Message
final String title;
final String body;
Message(
this.title, this.body
);
factory Message.fromJson(Map<String, dynamic> json) => Message(
json['title'].toString(),
json['body'].toString(),
);
Map<String, dynamic> toJson() =>
"title": title,
"body": body,
;
【讨论】:
以上是关于_TypeError(类型 'List<dynamic>' 不是类型 'Map<String, dynamic> 的子类型的主要内容,如果未能解决你的问题,请参考以下文章
Flutter json解码_TypeError(类型'List <dynamic>'不是'Map <dynamic,dynamic>'类型的子类型)[关闭]
TypeError: %: 'list' 和 'int' 不支持的操作数类型 |很有趣的案例?
Python debug——TypeError unhashable type(list/set/dict)
Python_异常:TypeError: write() argument must be str, not list
_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型) F