在我的Flutter代码中,我得到了以下JSON输入
{chat_mode: supplier,
last_message: Hello World,
members: {one: {name: yohan, photo: https://com/google.jpg, uid: qwer},
two: {name: gayan, photo: https://ih1.u1.jpg, uid: abcd}}}
实际上,这是来自Firebase数据库的数据。如果我导出数据库,它看起来像这样
"chat_room" : {
"-MMbVLc0ucT4rck8zWGB" : {
"chat_mode" : "supplier",
"last_message" : "Hello World",
"members" : {
"one" : {
"name" : "yohan",
"photo" : "https://img-authors.flaticon.com/google.jpg",
"uid" : "qwer"
},
"two" : {
"name" : "gayan",
"photo" : "https://ih1.redbubble.net/image.1057254628.1918/flat,750x,075,f-pad,750x1000,f8f8f8.u1.jpg",
"uid" : "abcd"
}
}
},
"-MMbbviIhWjtXh5mwspG" : {
"chat_mode" : "supplier",
"last_message" : "Hello World",
"members" : {
"one" : {
"name" : "yohan",
"photo" : "https://img-authors.flaticon.com/google.jpg",
"uid" : "K9ioYyiEUQVVNjx0owwsaZJzPph2"
},
"two" : {
"name" : "gayan",
"photo" : "https://ih1.redbubble.net/image.1057254628.1918/flat,750x,075,f-pad,750x1000,f8f8f8.u1.jpg",
"uid" : "K9ioYyiEUQVVNjx0owwsaZJzPph2abcd"
}
}
}
}
我正在使用
Models
因此,上述结构是由他们生成并保存在数据库中的。下面是模型
聊天室模型
import 'chat_member_model.dart';
class ChatRoomModel {
ChatRoomModel({
this.chatMode,
this.lastMessage,
this.members,
this.timestamp,
});
String chatMode;
String lastMessage;
Map<String, Member> members;
int timestamp;
factory ChatRoomModel.fromJson(Map<String, dynamic> json) => ChatRoomModel(
chatMode: json["chat_mode"],
lastMessage: json["last_message"],
members: Map.from(json["members"]).map((k, v) => MapEntry<String, Member>(k, Member.fromJson(v))),
timestamp: json["timestamp"],
);
Map<String, dynamic> toJson() => {
"chat_mode": chatMode,
"last_message": lastMessage,
"members": Map.from(members).map((k, v) => MapEntry<String, dynamic>(k, v.toJson())),
"timestamp": timestamp,
};
}
会员
class Member {
Member({
this.name,
this.photo,
this.uid
});
String name;
String photo;
String uid;
factory Member.fromJson(Map<String, dynamic> json) => Member(
name: json["name"],
photo: json["photo"],
uid: json["uid"],
);
Map<String, dynamic> toJson() => {
"name": name,
"photo": photo,
"uid": uid,
};
}
为了从服务器读取传入的JSON,我使用了
DataSnapshot
并尝试将其转换为Model。下面是代码。
import 'dart:convert' as convert;
print(snapshot.value);
print("HERE WE GO!!");
ChatRoomModel chatRoomModel = ChatRoomModel.fromJson(convert.json.decode(snapshot.value));
不幸的是,这会触发以下错误,我无法执行转换。
flutter: {chat_mode: supplier, last_message: Hello World, members: {one: {name: yohan, photo: https://img-authors.flaticon.com/google.jpg, uid: qwer}, two: {name: gayan, photo: https://ih1.redbubble.net/image.1057254628.1918/flat,750x,075,f-pad,750x1000,f8f8f8.u1.jpg, uid: abcd}}}
flutter: HERE WE GO!!
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'String'
我该如何解决这个问题?
编辑
我也试着跟随,但仍然不起作用
ChatRoomModel chatRoomModel = ChatRoomModel.fromJson(snapshot.value);
我得到这个错误
Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'