手势检测器未检测到视频播放器屏幕,因为我将视频播放器作为其子项

Dev*_*er 2 dart flutter 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,
                ),
              ),
            ),
Run Code Online (Sandbox Code Playgroud)

如果我这样写代码,它就不会访问 Chewie 小部件

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

小智 7

  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),
                                  ),
                                ))),
    
    
    Run Code Online (Sandbox Code Playgroud)