Flutter 如何在不失去控制焦点的情况下向视频播放器添加双击手势?
我用包装纸试过了Flutter 如何在不失去控制焦点的情况下向视频播放器添加双击手势?,flutter,dart,flutter-dependencies,flutter-video-player,Flutter,Dart,Flutter Dependencies,Flutter Video Player,我用包装纸试过了 return ClipRRect( borderRadius: BorderRadius.circular(30.0), child: Chewie( controller: _chewieController, ) 与 现在我可以双击,但只需一次点击,控制器就不会出现,有什么方法可以同时实现这两个目标吗。 通过双击,我可以调用like函数,通过onTap显示控制器。 上面
return ClipRRect(
borderRadius: BorderRadius.circular(30.0),
child: Chewie(
controller: _chewieController,
)
与
现在我可以双击,但只需一次点击,控制器就不会出现,有什么方法可以同时实现这两个目标吗。
通过双击,我可以调用like函数,通过onTap显示控制器。
上面使用的包Chuie 0.12.0我不知道如何构建
Chuie
,但如果有GestureDetector,您可以将其更改为类似以下内容:
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => // show_controls,),
onDoubleTap:() => setState(() => // like behaviour,),
child: VideoWidget // or whatever is there
}
因此,您可以在一个小部件上同时使用两个侦听器。我认为那样的话,onTap
会稍微延迟一下,以检查它是否是onDoubleTap
。这样,您就不必在小部件的顶部添加覆盖
如果出于某种原因,您希望有此覆盖。。。然后这里有趣的属性是行为
,因为它决定后面的元素是否接收事件
更新
试着换成
GestureDetector(
behavior: HitTestBehavior.translucent,
onDoubleTap: (){
print('its double tapped ');
}
或
在github项目中,这一行:
似乎控件仅在视频处于暂停状态时显示。它是关于这个值的controller.value.isPlaying
为什么不在你自己的手势检测器中控制它呢
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => _controller.pause() ,), //changing here
onDoubleTap:() => setState(() => // like behaviour,),
child: VideoWidget // or whatever is there
}
无论如何,希望你能找到答案
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的替代方案,用于使视频静音。嘿,感谢您的响应,但最主要的问题是视频播放器,而不是手势检测器。我需要知道视频播放器是否有任何显示控制功能。@kanwarmanraj什么视频播放器?对于Chuie或video_player 1.0.1ok,如果不是在官方文档中,您应该提供一些您想要使用的软件包说明,否则很难知道您在用什么。哦,我的错:D它是由Flatter团队开发的
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,
),
),
);