Плагин 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);
}