如何在just_audio中使用来自firestore的多个音频数据动态填充AudioSource



我一直在尝试用firestore中的数据动态填充AudioSource.uri((。

我把一些歌曲上传到了firestore数据库中,我想把这些数据用于我的应用程序中的just_audio播放列表。我已经尽了一切可能,我真的不知道为什么它不起作用。

我不想像插件示例中那样静态地添加歌曲URL和其他数据。

以下是我的尝试:

首先,我使用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'))),
);
}),
)

然后,这里是JustAudioPlaylist页面,我希望在其中检索并填充AudioSource.uri((.

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是在null上调用的";。有人能帮忙吗?

您的相关代码是:

_playlist.addAll(...);

该错误意味着_playlistnull。也就是说,_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...)
);

相关内容

  • 没有找到相关文章