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();
}

0 ответов

Другие вопросы по тегам