0

我一直在尝试使用来自 firestore 的一些音频数据动态填充 MediaItem。

我正在使用确切的插件示例,但这次 mediaItems 是从 firestore 动态获取的。我已经多次查看我的代码,但我无法弄清楚我做错了什么。

这是我的尝试:

首先,我使用 StreamBuilder 获取歌曲数据并将其作为 DocumentSnapshot 列表传递给 AudioServicePlayer() 页面。

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'))),
                    );
                  }),
            )

我按预期成功收到了 QueryDocumentSnapshot。但是,当我尝试使用 widget.songs 列表填充 MediaItem 时,它只返回一个没有错误的空白页面。我无法弄清楚我在这里做错了什么;

class AudioServicePlayer extends StatefulWidget {
  static const String id = 'audio-service';
  List<DocumentSnapshot> songs = [];
  AudioServicePlayer({this.songs});

  @override
  _AudioServicePlayerState createState() => _AudioServicePlayerState();
}

class _AudioServicePlayerState extends State<AudioServicePlayer> {
  MediaLibrary _mediaLibrary = MediaLibrary();
  @override
  void initState() {
    _mediaLibrary._items.addAll(widget.songs
        .map((song) => MediaItem(
              // This can be any unique id, but we use the audio URL for convenience.
              id: song['song'],
              album: "Science Friday",
              title: song['songTitle'],
              artist: song['artist']['artistName'],
              duration: Duration(milliseconds: 5739820),
              artUri: Uri.parse(song['songImage']).toString(),
            ))
        .toList());
    super.initState();
  }
4

0 回答 0