Как динамически извлекать несколько аудиоданных в список asset_audio_player из firestore?

# #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. Не могли бы вы указать мне на какое-нибудь руководство или что-то в этом роде? Еще раз спасибо вам за вашу помощь