我试图让GestureDetector在Stack中工作,并在其上面放置一个Container,但从未调用ONTAP回调.

正如你所看到的,它甚至对HitTestBehavior.translucent也不起作用

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Stack(
          children: <Widget>[
            GestureDetector(
              behavior: HitTestBehavior.translucent,
              onTap: () {
                print('tap');
              },
              child: Container(color: Colors.blue),
            ),
            Container(color: Colors.white),
          ],
        ),
      ),
    );
  }

我知道我想要捕获另一个Widget下面的点击事件可能会很奇怪,但在我的实际情况中,上面的Widget是透明的,有时会有渐变.

推荐答案

IgnorePointer就可以解决这个问题.

您可以用IgnorePointer将顶部小部件(在本例中为白色Container)括起来.

Stack(
  children:[
    (...your down widget which should handle the tap...)

    IgnorePointer(
      child: (... your top widget which must be transparent to any tap ...)
    )
  ]
)

然后,顶部的小部件对手势事件变得透明.活动将由Stack强中排名最靠前的DeDeDector(如果有的话)捕捉.

例如,您可能只需对代码稍作更改即可获得所需的结果,如下所示:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Stack(
          children: <Widget>[
            GestureDetector(
              behavior: HitTestBehavior.translucent,
              onTap: () {
                print('tap');
              },
              child: Container(color: Colors.blue),
            ),
            IgnorePointer(ignoring:true,child:Container(color: Colors.white)),
          ],
        ),
      ),
    );
  }

Flutter相关问答推荐

使用Bg晃动背景图像边界

在Riverpod ConsumerWidget中使用文本编辑控制器

使用GO_ROUTER在模式内导航

我不能在Fighting中裁剪图片输入错误,否则应用程序会崩溃

Flutter 应用程序中的Firebase实时数据库中的orderByChild()不适用于我

从超级应用程序启动时,Flutter 小应用程序中未加载资源

Android Studio扩展控件上未加载Google map

Flutter守护进程无法启动

在 Flutter 中解码 BLE 设备负载

文本溢出文本框 - Flutter

Flutter / 为什么当我点击我的图片时我的模型没有更新?

Flutter canvas 绘制不同 colored颜色 的原始点

Flutter可滚动定位列表支持rtl方向吗?

通过点击缩略图加载全屏图像

如何在 Flutter 中将列小部件添加到行小部件?

如何验证非表单字段?

Flutter 活跃的互联网连接

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

是否可以在 Flutter 中使用 ToggleButtons 在页面 PageView 之间切换?

在 Flutter Bloc 中具有称为 status 的属性的一种状态或不同的状态,哪个更可取?