# #javascript #google-cloud-firestore #audio-player #just-audio
Вопрос:
Я пытался использовать 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())
],
);
}),
),
);
}
}
Комментарии:
1. Можете ли вы показать часть своего кода.
2. @TarikHuber Привет, я отредактировал вопрос и добавил часть своего кода. Я с нетерпением жду вашей любезной помощи. Спасибо
3. Вы отправляете
AudioPlayerBackgroundPlaylist
только одну песню. Вам нужно будетAudioPlayerBackgroundPlaylist
перезаписать, чтобы принятьaudio
список, чтобы использовать его. Но я могу сказать, что с этим нелегко работать. Я также использую ту же библиотеку в одном из своих приложений. Очень странная и странная либ.4. Спасибо за ваш ответ, теперь я понимаю, что происходит. Проблема в том, что я не знаю, как заставить AudioPlayerBackgroundPlaylist получать список аудио вместо строки и даже как отправить список со страницы StreamBuilder. Не могли бы вы указать мне на какое-нибудь руководство или что-то в этом роде? Еще раз спасибо вам за вашу помощь