just-audio - 如何在just_audio中使用来自firestore的多个音频数据动态填充AudioSource?
问题描述
我一直在尝试使用来自 firestore 的数据动态填充 AudioSource.uri()。
我将一些歌曲上传到 firestore 数据库,我想在我的应用程序中将这些数据用于 just_audio 播放列表。我已尽一切可能,我真的不确定为什么它不起作用。
我不想像插件示例中所示静态添加歌曲网址和其他数据。
这是我的尝试:
首先,我使用 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'))),
);
}),
)
然后,这是我希望检索和填充 AudioSource.uri() 的 JustAudioPlaylist 页面。
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 was called on null”。请问有人可以帮忙吗?
解决方案
您的相关代码是:
_playlist.addAll(...);
错误的意思_playlist
是null
。也就是说,_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...)
);
推荐阅读
- android - 使用导航组件为某些片段自定义“向上导航”行为
- r - 基于一个字符串列对变量进行分类的方法
- r - 基准测试时如何获取内存信息?
- java - 如何在与当前项目的 JRE 不同的 JRE 上执行库 jar 中的方法
- python - 如何根据每行更改的条件对列执行添加?
- python - Scrapy无法解析链接
- vue.js - 如何使用 VueJS 和 GraphQL-Yoga 缓存 GraphQL 请求
- mysql - SQL - 如何获取在特定日期之前有任何记录的最新日期?
- spring-jms - 使用 Spring Actuator 检查 JMS 的运行状况
- c++ - 如何从dll注入进程的受害者进程调用静态库静态类成员函数