Как показать текущее время воспроизведения видео при использовании плагина video_player во флаттере? - PullRequest
0 голосов
/ 16 февраля 2020

В настоящее время используется флаттер video_player плагин для потокового видео по указанной ссылке. Проблема в том, что мне пришлось скрыть обычный интерактивный видеоинтерфейс, чтобы пользователь не мог пропустить видео. Теперь большая часть работы выполнена, просто нужно знать, как отобразить duration и current position видео, которое было воспроизведено.

videoController.value.duration.inSeconds дает мне часть duration, а videoController.value.position дает секция position. But how to keep updating the results for the position`?

void checkTimer(){
    if(playerController.value.position == playerController.value.duration){
      setState(() {
        Duration duration = Duration(milliseconds: playerController?.value?.position?.inMilliseconds?.round());

      nowTime = [duration.inHours, duration.inMinutes, duration.inSeconds]
        .map((seg) => seg.remainder(60).toString().padLeft(2, '0'))
        .join(':');
      });
    }

код выше был создан для обновления времени по мере необходимости. но теперь вопрос в том, как обновить время. я должен использовать setState() или что-то еще, потому что приведенный выше код не работает для меня.

Видео не загружается там, где загружается экран. Он загружается, когда пользователи нажимают кнопку воспроизведения. поэтому до этого времени у нас даже нет значения duration, поскольку данные все еще находятся в пути.

1 Ответ

0 голосов
/ 14 апреля 2020

Как насчет использования ValueListenableBuilder?

Он будет прослушивать значение контроллера и обновлять его при каждом изменении значения.

вот пример:

ValueListenableBuilder(
  valueListenable: playerController,
  builder: (context, VideoPlayerValue value, child) {
    //Do Something with the value.
    return Text(value.position);
  },
);
...