Плагин Just Audio Flutter - как преобразовать продолжительность из слушателя потока в целое число?

Я использую Flutter's Just-Audioплагин для воспроизведения файла mp3, полученного из файла в моем приложении. В 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'.

Итак, как я могу получить продолжительность из моего Streamlistener как целое число, чтобы я мог использовать его в качестве конечной точки в player.setClip?

1 ответ

Проблема возникает из-за того, что durationStream возвращает длительность, допускающую значение NULL , и она не должна допускать значения NULL, чтобы можно было преобразовать ее в целое число. Вы можете повысить продолжительность до типа, не допускающего значения NULL, с помощью проверки NULL:

      int newevent;
player.durationStream.listen((event) {
  if(event != null){
    newevent = event.inMilliseconds;
  }
});
await player.setClip(start: Duration(milliseconds: 0), end: Duration(milliseconds: newevent - 500);
}
Другие вопросы по тегам