将实时数据库中的数据检索到列表视图中
Posted
技术标签:
【中文标题】将实时数据库中的数据检索到列表视图中【英文标题】:Retrieve data from realtime database into listview 【发布时间】:2021-09-13 21:53:16 【问题描述】:这是我的文件 song.dart
class Song
final String title;
final String singer;
final String cover;
final String url;
Song(this.title, this.singer, this.cover, this.url);
Song.fromJson(Map<String, dynamic> json)
: title = json['title'],
singer = json['singer'],
cover = json['cover'],
url = json['url'];
Map<String, dynamic> toJson() =>
'title': title,
'singer': singer,
'cover': cover,
'url' : url,
;
在 main.dart 上,这是我试图从实时数据库中获取数据的代码:
List musicList = <Song>[];
_MusicAppState()
FirebaseDatabase.instance.reference().child("$getCurrentUID()").once().then((DataSnapshot snapshot)
print("Sucessfully loaded the data");
snapshot.value.forEach((k,v)
musicList.add(v);
);
setState(()
);
).catchError((error)
print("Failed to loaded the data");
);
也在 main.dart 上,这是我试图将数据显示到列表视图中的代码部分:
Expanded(
child: ListView.builder(
itemCount: musicList.length,
itemBuilder: (context, index) => customListTitle(
onTap: ()
playMusic(musicList[index]['url']);
setState(()
_currentTitle = musicList[index]['title'];
_currentSinger = musicList[index]['singer'];
_currentCover = musicList[index]['cover'];
);
,
title: musicList[index]['title'],
singer: musicList[index]['singer'],
cover: musicList[index]['cover'],
),
),
),
我不知道为什么数据没有加载到列表视图中。但是如果我删除List musicList = <Song>[];
行中的<Song>
,数据将被加载到列表视图中。如何使用<Song>
将数据加载到列表视图中?因为我需要 Song 类来构建搜索功能,或者我可以在没有类 Song 的情况下构建搜索功能的任何其他方式?
【问题讨论】:
【参考方案1】:你的 musicList 等待类型为 Song 命名的类,但一旦方法返回 DataSnapshot 类。您应该首先从 DataSnapshot 转换为 Song 类,如果您不知道如何转换我正在解释。
你可以试试下面的代码;
final musicList = <Song>[];
FirebaseDatabase.instance.reference().child("$getCurrentUID()").once().then((DataSnapshot snapshot)
print("Sucessfully loaded the data");
for(final snapshot in snapshot.value)
final songModel = Song.fromJson(snapshot as Map);
musicList.add(songModel);
setState(() );
);
【讨论】:
我试过了,但我在 Map 的快照上出错了。 “参数类型 'Map以上是关于将实时数据库中的数据检索到列表视图中的主要内容,如果未能解决你的问题,请参考以下文章
我如何从firebase检索数据到android listview顶部[重复]
将 Firebase 实时数据库与 SwiftUI 列表一起使用 - 清除列表
QT如何实现QSqltablemodel实时更新数据库,并在tableview中实时显示,