_TypeError (ประเภท 'List <dynamic>' ไม่ใช่ประเภทย่อยของประเภท 'Map <String, dynamic>
Nov 13 2020
ต้องการความช่วยเหลือจากคุณในการแก้ไขข้อผิดพลาดนี้ใน 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 (ประเภท 'รายการ' ไม่ใช่ประเภทย่อยของประเภท 'Map <String, dynamic>') ในฟังก์ชัน loadMessage (บรรทัดที่ 3 - จากวิธี Json) ทำไม?
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);
}
คำตอบ
hasankaraman Nov 13 2020 at 21:17
messagejson ส่งคืนอาร์เรย์ JSON ไม่ใช่วัตถุ json เพื่อให้เป็น List not 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);
}
hasankaraman Nov 17 2020 at 16:17
วิธีการหมุนรายการในแบบจำลองไม่ถูกต้อง คุณสามารถแก้ไขได้. คุณจะเข้าใจถ้าคุณมองอย่างรอบคอบ
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,
};
}