我正在为如何从 Firebase 的实时数据库获取用户朋友的数据以在 Flutter 中构建它而苦苦挣扎。数据库的结构如下所示: enter image description here
本质上,在我的代码中,我正在监听来自数据库的用户好友列表的变化,然后获取好友 ID,以便我可以查询好友的其余元数据(图像、姓名等)以构建在应用程序中列出好友列表。我遇到的问题是我似乎无法正确映射 Json 数据,并且出现以下错误:
未处理的异常:类型 '_InternalLinkedHashMap
任何见解将不胜感激
class _FriendsScreenState extends State<FriendsScreen> {
@override
void initState() {
getUserFriendsList();
super.initState();
}
getUserFriendsList() async {
rtdb.child('friends').child(widget.currentUserID).onValue.listen((event) {
final data = new Map<String, dynamic>.from(event.snapshot.value);
data.keys.forEach((element) async {
DataSnapshot userInfo = await usersRef.child(element).get();
User users = User.fromJson(json.decode(userInfo.value));
});
});
}
factory User.fromJson(Map<String, dynamic> parsedJson) {
return User(
imageUrl: parsedJson['userImageUrl'],
userFirstName: parsedJson['userFirstName'],
userLastName: parsedJson['userLastName'],
userID: parsedJson['userID'],
);
}
答案 0 :(得分:0)
我认为您在以下方面有问题:
User users = User.fromJson(json.decode(userInfo.value));
为什么你使用了两次 JSON 解码(json.decode & User.fromJson)? 但是,为了进一步分析,您应该提供数据并记录下来。
答案 1 :(得分:0)
无需将 json 解码为 DataSnaphot.value “将 [the] 数据快照的内容作为本机类型返回。”
所以 userInfo.value
不返回 String
,而是返回一个 Map
。
解决方案:
将结果从它返回的 Map<String, dynamic>
类型转换为 _InternalLinkedHashMap<dynamic, dynamic>
。
更改这一行:
User users = User.fromJson(json.decode(userInfo.value));
为此:
User users = User.fromJson(Map<String, dynamic>.from(userInfo.value));