dart 为什么我的Firebase实时数据库数据在使用侦听器时显示顺序不正确?

omvjsjqw  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在使用onValue侦听器侦听Firebase实时数据库中的节点。我应该按照它们被写入数据库的顺序获得聊天消息,但由于某种原因,我得到了第4条,第1条,第3条,然后是第2条消息。这是为什么呢?

void getChatListener() async {
    final node = 'chats';

    _groupChatRef = FirebaseDatabase.instance.ref(node);

    _chatsSubscription = _groupChatRef.onValue.listen((DatabaseEvent event) {
      if (event.snapshot.value != null) {
        dataList = [];
        final data = event.snapshot.value as Map<dynamic, dynamic>;

        data.forEach((key, value) {
          dataList.add(value);
        });

        setState(() {
          chats = dataList;
        });
      }
    });
  }

  //later on the widget builds a ListView using the chats variable
c9qzyr3d

c9qzyr3d1#

从Firebase Realtime Database获取数据列表时,DataSnapshot包含子节点的三条信息:
1.钥匙
1.他们的价值观
1.它们之间的相对顺序
当您在快照上调用value时,信息被转换为Map-其中只有键和值的空间。因此,关于订单的信息在此时丢失。
要保持顺序,请按照使用onValue侦听列表的文档中所示处理子节点:

_chatsSubscription = _groupChatRef.onValue.listen((DatabaseEvent event) {
  for (final child in event.snapshot.children) {
    ...
  }
  ...

相关问题