Flutter - Как заставить виджет слайдера вести себя как SeekBar
Мой код флаттера (плагин Just-Audio)
SliderTheme(
data: SliderThemeData(
trackHeight: 3,
thumbShape:
RoundSliderThumbShape(enabledThumbRadius: 8),
thumbColor: kWhiteColor,
activeTrackColor: kPrimaryColor,
inactiveTrackColor: kWhiteColor.withOpacity(0.5),
overlayColor: kPrimaryColor.withOpacity(0.1),
trackShape: AppCustomTrackShape(),
),
child: Slider(
max: mediaProvider.totalDuration.inSeconds.toDouble(),
value: mediaProvider.currentPosition.inSeconds.toDouble(),
onChanged: (double value) async{
await mediaProvider.seekAudioPlayer(value);
},
),
)
Текущее поведение: когда воспроизводится звук и я перетаскиваю ползунок, вы замечаете странную анимацию, как будто ползунок перетаскивают в противоположном направлении.
Я думаю, что странное поведение вызвано тем, что значение ползунка постоянно меняется (воспроизведение звука)
Обязательное поведение: когда воспроизводится звук и я перетаскиваю ползунок, ползунок должен анимироваться (перемещаться), но значение ползунка не должно изменяться до тех пор, пока не закончится событие перетаскивания (onChnagedEnd). Так же, как YouTube и любой другой аудио / видео плеер.
Обновление переменной поставщика
void readyPlayer(){
audioPlayer.durationStream.listen((Duration? duration) {
if(duration != null){
updateTotalDuration(duration);
}
});
audioPlayer.positionStream.listen((Duration duration) {
updateCurrentPosition(duration);
});
audioPlayer.playerStateStream.listen((PlayerState playerState) {
updatePlayerState(playerState);
});
audioPlayer.playingStream.listen((bool playing) {
updatePlaying(playing);
});
audioPlayer.processingStateStream.listen((ProcessingState state){
if(state == ProcessingState.completed){
nextScene();
playAudio();
}
});
notifyListeners();
}