#json #list #flutter #dart #google-cloud-firestore
#json #Список #трепетание #dart #google-cloud-firestore
Вопрос:
Когда я пытаюсь преобразовать json в объект, появляется эта ошибка:
Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
Это происходит только тогда, когда я пытаюсь преобразовать List
тип объектов и Chat
объект,
вот класс и функция fromJson
для объекта.
Я не знаю, что не так с преобразованием.
class Project {
String projectID;
String projectName;
String image;
String joiningLink;
bool isJoiningLinkEnabled;
String pinnedMessage;
Chat chat;
List<Event> event;
List<Member> members;
List<String> membersIDs;
List<Task> task;
Project(
{this.projectID,
this.projectName,
this.image,
this.joiningLink,
this.isJoiningLinkEnabled,
this.pinnedMessage,
this.chat,
this.event,
this.members,
this.membersIDs,
this.task});
// Exception shows here
Project.fromJson(Map<String, dynamic> json) {
projectID = json['projectID'];
projectName = json['projectName'];
image = json['image'];
joiningLink = json['joiningLink'];
isJoiningLinkEnabled = json['isJoiningLinkEnabled'];
pinnedMessage = json['pinnedMessage'];
if (json['event'] != null) {
event = new List<Event>();
json['event'].forEach((v) {
event.add(new Event.fromJson(v));
});
}
chat = json['chat'] != null ? new Chat.fromJson(json['chat']) : null;
if (json['members'] != null) {
members = new List<Member>();
json['members'].forEach((v) {
members.add(new Member.fromJson(v));
});
}
membersIDs = List.of(json['membersIDs'].cast<String>());
if (json['Task'] != null) {
task = new List<Task>();
json['Task'].forEach((v) {
task.add(new Task.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['projectID'] = this.projectID;
data['projectName'] = this.projectName;
data['image'] = this.image;
data['joiningLink'] = this.joiningLink;
data['isJoiningLinkEnabled'] = this.isJoiningLinkEnabled;
data['pinnedMessage'] = this.pinnedMessage;
if (this.chat != null) {
data['chat'] = this.chat.toJson();
}
if (this.event != null) {
data['event'] = this.event.map((v) => v.toJson()).toList();
}
if (this.members != null) {
data['members'] = this.members.map((v) => v.toJson()).toList();
}
data['membersIDs'] = this.membersIDs;
if (this.task != null) {
data['Task'] = this.task.map((v) => v.toJson()).toList();
}
return data;
}
}
Ответ №1:
кажется, что декодер ( json.decoder
возможно) декодирует все объекты на карте, но чат декодируется таким образом, что он не может интерпретировать ключ String
, поэтому он использует a <dynamic, dynamic>
, вы могли бы попытаться создать карту, преобразующую динамику в строку, и передать ее в качестве аргумента Chat.fromJson()
(который, я полагаю, он принимаеткарта <Строка, динамический> в качестве аргумента, и именно поэтому она выдает ошибку)
chat = json['chat'] != null ? new Chat.fromJson(Map<String,dynamic>.from(json['chat'])) : null;