如何显示我的数据库最新帖子?

时间:2019-11-19 13:30:41

标签: firebase firebase-realtime-database flutter

我的数据库看起来像this

在我的应用中,它以随机顺序显示,但是我希望最近添加的内容会显示在顶部。

我尝试按孩子订购,但不起作用。

这是检索数据代码:

DatabaseReference playlistsRef = FirebaseDatabase.instance.reference().child("Playlists");
playlistsRef.once().then((DataSnapshot snap)
{
  var KEYSplaylists = snap.value.keys;
  var Dataplaylists = snap.value;

  playlistsList.clear();

  for (var individualkeyplaylists in KEYSplaylists) {
    Playlists playlists = new Playlists
      (
        Dataplaylists[individualkeyplaylists]['image'],
        //    DATA[individualkeyplaylists]['playlisturl'],
        //    DATA[individualkeyplaylists]['time'],
        Dataplaylists[individualkeyplaylists]['title'],
        Dataplaylists[individualkeyplaylists]['type'],
        //    DATA[individualkeyplaylists]['userid'],
        Dataplaylists[individualkeyplaylists]['tap'],
      );

    playlistsList.add(playlists);

    setState(() {
      print('Length: $playlistsList.length');
    });
  };
});

这里还有列表视图生成器

 ListView.builder
 (
   itemCount:  playlistsList.length,
   itemBuilder: (_, index) {
     return PlaylistsUI(playlistsList[index].image, playlistsList[index].title, playlistsList[index].type, playlistsList[index].tap,);
   }
 )

2 个答案:

答案 0 :(得分:0)

尝试一下:

playlistsList.insert(0, playlists); // Instead of playlistsList.add(playlists);

答案 1 :(得分:0)

问题是snap.value返回一个映射,并且根据定义,映射中的键/值没有排序。

为了保持项目从数据库中发出的顺序,您需要收听onChild... events(至少直到DataSnapshot.forEach is implemented)。这些onChild...事件会为各个子节点触发,因此使您可以维持正确的顺序。对于这种(相当复杂的)实现,请查看FlutterFire库中的FirebaseSortedList class

或者,您可以简单地对客户端中的节点重新排序。这是重复的工作,但是实现起来可能更快。