0

我尝试通过包装

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,我可以调用类似的函数并使用 onTap 来显示控制器。
上面使用的包chewie 0.12.0

4

2 回答 2

2

我不知道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
}

无论如何,希望你能找到答案

于 2020-12-08T16:25:57.763 回答
0
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 的替代方法来静音视频。

于 2020-12-08T21:05:41.607 回答