代码之家  ›  专栏  ›  技术社区  ›  Sumit

实时数据库fireabase获取反向数据

  •  0
  • Sumit  · 技术社区  · 2 年前

    我正在使用firebase实时数据库在flutter中创建一个聊天应用程序。

    但我想获得反向数据来设置聊天。 有人能帮我吗?

    var fireDatabase3 = FirebaseDatabase.instance.ref("messages");
        
    FirebaseAnimatedList(
       query: fireDatabase3,
        reverse: true,
        itemBuilder: (context, snapshot, animation, index) {
    
          if (snapshot.child("chatID").value == chatMainScreenProvider.userDetails["chatID"]) {
            if (snapshot.child("senderID").value.toString() == sharedPreferenceProvider.userId.toString()) {
              return _chatBubble(
                snapshot.child("message").value.toString(),true);
            } else {
              return _chatBubble(
                snapshot.child("message").value.toString(),false);
            }
          }else{
            return SizedBox.shrink();
          }
        },
      )
    

    Database Image

    1 回复  |  直到 2 年前
        1
  •  2
  •   Frank van Puffelen    2 年前

    Firebase实时数据库只能按升序返回子项。它没有按降序返回它们的选项。

    按降序获得结果的两种最常见的解决方法是:

    1. 在客户端重新排序结果。
    2. 在数据库中插入一个倒置的值,然后对其进行排序。

    在你的屏幕截图中,我看到 dateTime 属性,该属性看起来像一个倒置的时间戳。这使得您似乎在尝试使用选项#2,除了将值存储为字符串而不是数字之外。

    您已经可以尝试:

    query: fireDatabase3.orderByChild("dateTime"),
    

    这应该起作用,因为您拥有的时间戳值也可以按字典排序。但是,如果它不起作用(实际上:即使它起作用),您最好更改写入这些数据的代码,以存储 dateTime 作为数字而不是字符串值。

    另请参阅这些密切相关的问题: