我放置视频播放器时,手势检测器未检测到视频播放器屏幕是它的子级

时间:2019-09-29 15:20:15

标签: flutter dart flutter-layout

我有一个视频播放器,我想访问视频播放器屏幕以在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,
                ),
            ),

3 个答案:

答案 0 :(得分:0)

GestureDetector仅检测child上发生的那些点击。

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

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

解决方案是将following作为GestureDetector的子代。

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

答案 1 :(得分:0)

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

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

                  )

答案 2 :(得分:0)

  1. 用 IgnorePointer() 包裹你的视频播放器

  2. 行为: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),
                                  ),
                                ))),