#flutter #android-studio #dart #video #video-player
Вопрос:
Я работаю с видеоплеером под названием «флик видеоплеер». Я могу воспроизводить видео довольно хорошо с функциями по умолчанию. Проблема возникает, когда я прокручиваю экран вниз, а видео продолжает воспроизводиться в фоновом режиме. Я хотел бы приостановить его, когда он не отображается или когда пользователь переходит на другую страницу приложения проекта.
Видеоплеер, который я использую (flick_video_player), имеет зависимость от video_player.
Ответы очень ценятся. С уважением
Комментарии:
1. (Ну, если бы вы опубликовали какой-то код, нам не нужно было бы угадывать детали) Если вы используете
ListView.builder
, вы можете приостановить свое видео методом dispose (опять же, при условии, что ваше видео завернуто в виджет с отслеживанием состояния).
Ответ №1:
Я думаю, что вы можете использовать детектор видимости для этой цели-
VisibilityDetector(
key: ObjectKey(flickManager),
onVisibilityChanged: (visibility){
if (visibility.visibleFraction == 0 amp;amp; this.mounted) {
flickManager?.flickControlManager?.pause();//pausing functionality
}
},
child: Container(
child: AspectRatio(
aspectRatio: 1280/720,
child: FlickVideoPlayer(
flickManager: flickManager
),
/*VideoPlayer(
video_controller
),*/
),
),
),
Я работал над чем-то подобным. Для получения дополнительной информации, например, как воспроизвести ее снова и многое другое, вы можете обратиться к этому репо — https://github.com/GeekyAnts/flick-video-player/tree/master/example/lib/feed_player
Надеюсь, это помогло!
Комментарии:
1. Проблема была решена аналогичным образом. Спасибо.
Ответ №2:
Может быть, этот пакет детекторов видимости может помочь https://pub.dev/packages/visibility_detector
Комментарии:
1. спасибо за предложение, я уже использовал детектор видимости. Пришлось кое-что подправить тут и там 🙂
Ответ №3:
Оберните свой список видео буквой а NotificationListener
и послушайте, начал ли пользователь или прекратил прокрутку. Используйте это значение для воспроизведения или приостановки видео.
Правка: неправильно истолковал ваш вопрос. Это будет работать для приостановки после прокрутки пользователем. Если вы хотите определить, находится ли видео в текущем режиме просмотра, проверьте список прокрутки.
return NotificationListener(
onNotification: (notificationInfo) {
if (notificationInfo is ScrollStartNotification) {
// Set a state value to indicate the user is scrolling
}
if (notificationInfo is ScrollEndNotification) {
// Set a state value to indicate the user stopped scrolling
}
return true;
},
child: YourVideos(),
);
Комментарии:
1. Спасибо за предложение, это может быть очень интуитивный способ его решения. Я, однако, смог решить эту проблему, посмотрев на один из примеров зависимостей, и мне пришлось немного подправить 🙂 Ваше здоровье!
2. Я даже не знал, что VisibilityDetector-это вещь, кажется, очень удобный инструмент, спасибо!
3. @Rohit Можете ли вы намекнуть, как вы решили эту проблему?
Ответ №4:
Это именно то, что вам нужно, inview_notifier_list:
InViewNotifierList(
isInViewPortCondition:
(double deltaTop, double deltaBottom, double vpHeight) {
return deltaTop < (0.5 * vpHeight) amp;amp; deltaBottom > (0.5 * vpHeight);
},
itemCount: 10,
builder: (BuildContext context, int index) {
return InViewNotifierWidget(
id: '$index',
builder: (BuildContext context, bool isInView, Widget child) {
return Container(
height: 250.0,
color: isInView ? Colors.green : Colors.red,
child: Text(
isInView ? 'Is in view' : 'Not in view',
),
);
},
);
},
);
Комментарии:
1. Спасибо за ваше предложение. Я сделал несколько настроек здесь и там, посмотрев на пример dependecy, и смог его решить :). Непременно попробовал бы ваш подход, если бы я застрял в будущем… Овации