Just Audio Flutter Plugin - 如何将持续时间从流监听器转换为整数?

Just Audio Flutter Plugin - How to convert Duration from Stream listener to Integer?

我正在使用 Flutter 的 Just-Audio 插件播放从我的应用程序中的 streambuilder 获取的 mp3 文件。 streambuilder returns setClip 函数所需的文件持续时间;

player.setClip(start: Duration(milliseconds: 0), end: Duration(milliseconds: 10);

“结束”点不是“10”,而是文件的持续时间减去 500 毫秒。所以我在 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'.

那么我怎样才能从我的 streamlistener 中获取我的持续时间作为一个整数,这样我就可以将它用作 player.setClip 中的终点?

出现问题是因为 durationStream returns 是一个 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);
  }
});