我的数据库看起来像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,);
}
)
答案 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。
或者,您可以简单地对客户端中的节点重新排序。这是重复的工作,但是实现起来可能更快。