0

我正在使用 Flutter 的插件来播放从我的应用程序中Just-Audio获取的 mp3 文件。streambuilder返回函数所需文件的streambuilder持续时间 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'.

那么如何从我的流监听器中获取我的持续时间作为整数,以便我可以将它用作中的端点player.setClip

4

1 回答 1

1

出现问题是因为 durationStream 返回一个可为的持续时间,并且它必须不可为空才能将其转换为整数。您可以使用空检查将持续时间提升为不可为空的类型。

此外,要仅在第一个事件之后运行 setClip,请使用first代替listensetClip在函数内部移动:

player.durationStream.first.then((event) {
  if(event != null){
    int newevent = event.inMilliseconds - 500;
    await player.setClip(start: Duration(milliseconds: 0), end: Duration(milliseconds: newevent);
  }
});
于 2021-05-18T14:12:38.020 回答