获取好友列表,然后显示好友列表

时间:2021-07-28 00:50:21

标签: firebase flutter dart firebase-realtime-database

我正在为如何从 Firebase 的实时数据库获取用户朋友的数据以在 Flutter 中构建它而苦苦挣扎。数据库的结构如下所示: enter image description here

本质上,在我的代码中,我正在监听来自数据库的用户好友列表的变化,然后获取好友 ID,以便我可以查询好友的其余元数据(图像、姓名等)以构建在应用程序中列出好友列表。我遇到的问题是我似乎无法正确映射 Json 数据,并且出现以下错误:

未处理的异常:类型 '_InternalLinkedHashMap' 不是类型 'String' 的子类型

任何见解将不胜感激

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'],
    );
  }

2 个答案:

答案 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));