如何解决如何在 just_audio 中使用来自 firestore 的多个音频数据动态填充 AudioSource?
我一直在尝试使用来自 firestore 的数据动态填充 AudioSource.uri()。
我将一些歌曲上传到了 firestore 数据库,我想将这些数据用于我的应用程序中的 just_audio 播放列表。我已经做了所有可能的事情,但我真的不知道为什么它不起作用。
这是我的尝试:
首先,我使用 StreamBuilder 获取歌曲数据并将其作为 DocumentSnapshot 列表传递到 JustAudioPlaylist() 页面;
List<DocumentSnapshot> _list;
_list = snapshot.data.docs;
Flexible(
child: ListView.builder(
itemCount: 1,itemBuilder: (BuildContext context,int index) {
return InkWell(
onTap: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => JustAudioPlaylist(
songs: [_list[index]],),));
},child:
Container(child: Center(child: Text('My Playlists'))),);
}),)
然后,这是我希望检索和填充 AudioSource.uri() 的 JustAudioPlaylist 页面。
class JustAudioPlaylist extends StatefulWidget {
final List songs;
JustAudioPlaylist({this.songs});
@override
_JustAudioPlaylistState createState() => _JustAudioPlaylistState();
}
class _JustAudioPlaylistState extends State<JustAudioPlaylist> {
AudioPlayer _player;
int _addedCount = 0;
var _playlist;
@override
void initState() {
_playlist
.addAll(widget.songs.map((song) => ConcatenatingAudioSource(children: [
AudioSource.uri(
Uri.parse(song['song']),tag: AudioMetadata(
album: "Science Friday",title: song['songTitle'],artwork: song['songImage'],])));
我不知道为什么它不起作用,但它会产生一个错误“addAll was called on null”。请问有人可以帮忙吗?
解决方法
您的相关代码是:
_playlist.addAll(...);
错误意味着 _playlist
是 null
。也就是说,_playlist
是一个未初始化的变量,实际上并不包含任何播放列表对象。我可以看到你声明了变量,所以它开始是空的:
var _playlist;
但是您实际上从未将任何内容存储到此变量中,例如 _playlist = ...something...
。因此,您的 _playlist
变量从 null
开始并继续保持 null
。
你可以这样做:
_playlist = ConcatenatingAudioSource(children: []);
// and then later...
_playlist.addAll(widget.songs.map(...etc...));
虽然 addAll
用于在播放列表创建后对其进行动态修改。但是在您的情况下,您知道在初始化时要播放哪些歌曲,因此您最好在开始时就初始化播放列表,以后不必添加:
_playlist = ConcatenatingAudioSource(
children: widget.songs.map(...etc...)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。