【问题标题】:Gesture detector not detecting the video player screen as I put video player is its child手势检测器没有检测到视频播放器屏幕,因为我把视频播放器是它的孩子
【发布时间】:2019-09-29 15:20:15
【问题描述】:

我有一个视频播放器,我想访问视频播放器屏幕以在 onTap 功能上添加一些功能,但 Gesturedetector 没有检测到屏幕,但如果我将容器作为其子项,它会检测到容器。

GestureDetector(
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => social(),
                  ),
                );
              },
              child: Container(
                height: 200,
                color: Colors.black,
                margin: EdgeInsets.only(right: 200),
                child: Chewie(
                  controller: _chewieController,
                ),
              ),
            ),

如果我把这个代码是这样的,它不会访问 Chewie 小部件

GestureDetector(
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => social(),
                  ),
                );
              },
              child: Chewie(
                  controller: _chewieController,
                ),
            ),

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:
    1. 将视频播放器封装在 IgnorePointer() 中

    2. behavior: HitTestBehavior.opaque 将此属性添加到您的手势检测器中,

         GestureDetector(
                                  behavior: HitTestBehavior.opaque,
                                  onTap: () {
                                    Utils.launchURL(PersonalData.email);
                                  },
                                  child: IgnorePointer(
      
                                    fit: BoxFit.fill,
                                    child: SizedBox(
                                      height:
                                          MediaQuery.of(context).size.height / 4,
                                      width:
                                          MediaQuery.of(context).size.width / 5,
                                      child: VideoPlayer(_controller),
                                    ),
                                  ))),
      
      

    【讨论】:

      【解决方案2】:

      GestureDetector 只会检测到在它上面发生的点击child

      在第一个示例中,您提供了Containerheight: 200,这意味着200 逻辑像素是您可以接收点击的高度。

      在第二种情况下,您的小部件Chewie 可能不希望widthheight 不允许GestureDetector 接收点击。

      解决方案是使用以下作为GestureDetector 的子级。

      SizedBox.expand(
        child: Chewie(...)
      )
      

      【讨论】:

      • 也不以这种方式工作。未检测到视频播放器屏幕
      【解决方案3】:

      手势检测器( 行为:HitTestBehavior.opaque,

                        onDoubleTap: (){
                          print('lllllllll');
                          setState(() {
                            isShowUser = !isShowUser;
                          });
                        },
      
                        )
      

      【讨论】:

      • 您不必使用 onTap,因为它只会显示控制器。我知道这来得太晚了,但希望它会对某人有所帮助。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2012-11-22
      • 2013-03-05
      相关资源
      最近更新 更多