Кто-нибудь успешно пытался динамически извлекать несколько аудиоданных в список asset_audio_player из firestore?
Я пытался использовать assets_audio_player для плейлиста. Я хочу динамически получать данные из коллекции firestore, но не могу поместить все песни в список воспроизведения.
Я безуспешно пытался динамически заполнить список аудио данными из firestore.
У меня есть 3 песни в коллекции db, но я смог добавить только 1 из них в список аудио.
Я не хочу добавлять URL-адреса песен статически, как показано в примере с плагином. Кто-нибудь может помочь?
я расстраиваюсь после стольких попыток и неудач. Я перепробовал все, что мог придумать.
Сначала я получил данные с помощью StreamBuilder и передал их в AudioPlayerBackgroundPlaylist();
children:
snapShot.data.docs.map((DocumentSnapshot document) {
return InkWell(
onTap: () {
MaterialPageRoute(builder: (
context) => AudioPlayerBackgroundPlaylist (
song: document.data()['song'],
songTitle: document.data()['songTitle'],
artistName: document.data()['artist']['artistName'],
)));
Вот страница AudioPlayerBackgroundPlaylist, где я ожидал увидеть песни, но я вижу только одну из трех песен в коллекции db
class AudioPlayerBackgroundPlaylist extends StatefulWidget {
String songTitle, artistName, song;
AudioPlayerBackgroundPlaylist(
{this.songTitle,
this.artistName,
this.song,
});
@override
_AudioPlayerBackgroundPlaylistState createState() =>
_AudioPlayerBackgroundPlaylistState();
}
class _AudioPlayerBackgroundPlaylistState
extends State<AudioPlayerBackgroundPlaylist> {
final AssetsAudioPlayer audioPlayer = AssetsAudioPlayer();
List<Audio> audios;
@override
void initState() {
audios = [
Audio.network(
widget.song,
metas: Metas(title: widget.songTitle, artist: widget.artistName)),
]
super.initState();
setupPlaylist();
}
@override
void dispose() {
super.dispose();
audioPlayer.dispose();
}
void setupPlaylist() async {
audioPlayer.open(
Playlist(audios: audios),
showNotification: true,
autoStart: false);
}
playMusic() async {
await audioPlayer.play();
}
pauseMusic() async {
await audioPlayer.pause();
}
skipPrevious() async {
await audioPlayer.previous();
}
skipNext() async {
await audioPlayer.next();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: Alignment.center,
child: audioPlayer.builderIsPlaying(builder: (context, isPlaying) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
IconButton(
iconSize: 50,
icon: Icon(Icons.skip_previous_rounded),
onPressed: () => skipPrevious()),
IconButton(
iconSize: 50,
icon: Icon(isPlaying
? Icons.pause_rounded
: Icons.play_arrow_rounded),
onPressed: () => isPlaying ? pauseMusic() : playMusic()),
IconButton(
iconSize: 50,
icon: Icon(Icons.skip_next_rounded),
onPressed: () => skipNext())
],
);
}),
),
);
}
}