如何解决Just Audio Flutter Plugin - 如何将持续时间从流侦听器转换为整数?
我正在使用 Flutter 的 Just-Audio
插件播放从我的应用中的 streambuilder
获取的 mp3 文件。 streambuilder
返回 setClip
函数所需的文件的持续时间;
player.setClip(start: Duration(milliseconds: 0),end: Duration(milliseconds: 10);
“结束”点应该是文件的持续时间减去 500 毫秒,而不是“10”。所以我的 initState
;
@override
void initState() {
super.initState();
_init();
}
Future<void> _init() async {
await player.setUrl('https://bucket.s3.amazonaws.com/example.mp3');
player.durationStream.listen((event) {
int newevent = event.inMilliseconds;
});
await player.setClip(start: Duration(milliseconds: 0),end: newevent);
}
但我需要将获取的持续时间转换为整数才能起飞 500 毫秒。不幸的是,int newevent = event.inMilliseconds;
会引发以下错误;
A value of type 'int' can't be assigned to a variable of type 'Duration?'. Try changing the type of the variable,or casting the right-hand type to 'Duration?'.
我已经试过了;
int? newevent = event?.inMilliseconds;
然后;
await player.setClip(start: Duration(milliseconds: 0),end: Duration(milliseconds: newevent));
但后来我在 milliseconds: newevent
下收到了这个红线错误;
The argument type 'Duration?' can't be assigned to the parameter type 'int'.
那么如何从流监听器中获取整数形式的持续时间,以便将其用作 player.setClip
中的终点?
解决方法
问题出现是因为durationStream 返回一个nullable 持续时间,并且它必须是不可为空的才能将其转换为整数。您可以使用空检查将持续时间提升为不可空类型。
此外,要仅在第一个事件之后运行 setClip,请使用 first
而不是 listen
并在函数内移动 setClip
:
player.durationStream.first.then((event) {
if(event != null){
int newevent = event.inMilliseconds - 500;
await player.setClip(start: Duration(milliseconds: 0),end: Duration(milliseconds: newevent);
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。