#flutter #dart #flutter-dependencies #flutter-video-player
#flutter #dart #flutter-зависимости #flutter-видеопроигрыватель
Вопрос:
Я попробовал это, обернув
return ClipRRect(
borderRadius: BorderRadius.circular(30.0),
child: Chewie(
controller: _chewieController,
)
с
return Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(30.0),
child: Chewie(
controller: _chewieController,
),
),
Positioned.fill(child: GestureDetector(
onDoubleTap: (){
print('its double tapped ');
},
child: Container(
color: Colors.transparent,
height: double.infinity,
width: double.infinity,
),))
],
);
Теперь я могу выполнять двойное нажатие, но одним нажатием контроллеры не отображаются, есть ли какой-нибудь способ добиться обеих целей.
С помощью DoubleTap я могу вызвать функцию like, а с помощью onTap показать контроллеры.
пакет, используемый выше, chewie 0.12.0
Ответ №1:
Я не знаю, как Chewie
это построено, но если есть GestureDetector, вы можете изменить его на что-то вроде этого:
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => // show_controls,),
onDoubleTap:() => setState(() => // like behaviour,),
child: VideoWidget // or whatever is there
}
Таким образом, вы можете иметь обоих слушателей в одном виджете. Я думаю, что этот способ onTap
будет с некоторой небольшой задержкой, чтобы проверить, не так ли это onDoubleTap
. Таким образом, вам не нужно накладывать наложение поверх вашего виджета.
Если по какой-то причине вы хотите иметь это наложение … тогда интересный атрибут здесь заключается behaviour
в том, что он решает, будут ли элементы позади получать события.
https://api.flutter.dev/flutter/rendering/PlatformViewHitTestBehavior-class.html
Обновление Попробуйте перейти на
GestureDetector(
behavior: HitTestBehavior.translucent,
onDoubleTap: (){
print('its double tapped ');
}
или
В проекте github эта строка: https://github.com/flutter/plugins/blob/master/packages/video_player/video_player/example/lib/main.dart#L290
Кажется, что элементы управления отображаются только тогда, когда видео находится в состоянии паузы. Это примерно такое значение controller.value.isPlaying
.
Почему бы не управлять им в вашем собственном GestureDetector?
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => _controller.pause() ,), //changing here
onDoubleTap:() => setState(() => // like behaviour,),
child: VideoWidget // or whatever is there
}
В любом случае, надеюсь, что вы найдете ответ
Комментарии:
1. Привет, спасибо за ответ, но главное — это видеоплеер, а не детектор жестов. Мне нужно знать, есть ли какая-либо функция управления показом для видеопроигрывателя.
2. специально для Chewie или для video_player 1.0.1
3. хорошо, вы должны предоставить некоторое описание пакета, который вы хотите использовать, если его нет в официальных документах, иначе трудно понять, что вы используете
4. о, мой плохой: D его разработала команда flutter
5. Я использую Chewie, и я вижу, что с помощью вашего метода onTap не обнаруживается, но все же в onTap он показывает контроллер и его обнаружение поведения двойного нажатия, так что, короче говоря, я могу добиться того, чего хотел, так что спасибо 🙂
Ответ №2:
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTapDown: (_) {
setState(() {
isMute = !isMute;
_chewieController.setVolume(isMute ? 0 : 1);
});
},
onDoubleTap: (){
print('liked');
},
child: ClipRRect(
borderRadius: BorderRadius.circular(30.0),
child: Chewie(
controller: _chewieController,
),
),
);
при простом onTap на видео отображается контроллер, onTap здесь не переопределяется, следовательно
onTapDown используется в качестве альтернативы onTap для отключения звука видео.