StackPositioned中包含MyWidget.

Stack(
  overflow: Overflow.visible,
  children: [
    Positioned(
    top: 0.0,
    left: 0.0,
    child: MyWidget(),
  )],
);

因为溢出是Overflow.visible,并且MyWidgetStack大,所以它显示在Stack之外,这就是我想要的.

然而,我无法在Stack区域之外的MyWidget区域中点击.它只是忽略了那里的水龙头.

我怎样才能确保MyWidget在那里接受手势呢?

推荐答案

发生这种行为是因为堆栈在判断子对象是否被击中之前判断指针是否在其边界内:

类:RenderBox(RenderStack扩展)

bool hitTest(BoxHitTestResult result, { @required Offset position }) {

    ...

    if (_size.contains(position)) {
      if (hitTestChildren(result, position: position) || hitTestSelf(position)) {
        result.add(BoxHitTestEntry(this, position));
        return true;
      }
    }
    return false;
}

我的解决方法是删除

if (_size.contains(position))

判断一下. 不幸的是,如果不从框架复制代码,这是不可能的.

以下是我所做的:

  • 复制了Stack类并将其命名为Stack2
  • 复制RenderStack并将其命名为RenderStack2
  • 使Stack2引用RenderStack2
  • 添加了上面的hitTest方法,但没有_size.containers判断
  • 复制Posited并将其命名为Positioned2,并将其引用Stack2作为其通用参数
  • 在我的代码中使用Stack2和Positiond2

这个解决方案绝不是最优的,但它实现了预期的行为.

Flutter相关问答推荐

如何在flutter中获得类似属性的float(CSS属性)

Flutter bloc -如何使用BlocBuilder?

创建后检索FiRestore文档ID

摆动如何更改弹出菜单项高亮显示 colored颜色 半径

ReCAPTCHA Enterprise中的严重安全漏洞

如何使用Dio/Ffltter(前端)和amp;Go(后端)向API发送正确的请求

Android Studio将不会构建iOS模拟器应用程序,因为plist.info有问题

Flutter-Riverpod:如何只从提供者读取一次值

如何在 Flutter 中设计像 zomato 应用程序一样的搜索字段?

使用 flutter_svg 在 flutter 中的 Canvas 上绘制 SVG 图像

自定义类提供程序 Riverpod Flutter 中的可变变量

如何修改来自合并 list 的 Android list 权限?

如何从Firebase登录获取用户信息,如电话号码、出生日期和性别

Flutter ImagePicker - 在 onPressed 中异步获取图像显示 lint 警告

PreferredSizeWidget类不能用作混合,因为它既不是混合类也不是混合

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

如何在 Flutter 中使用 drawLine() 和 drawCircle() 绘制等距离的 4 条线

为什么将 bloc 提供程序放在单独的文件/类中会引发错误?

Flutter Serverpod 在示例项目上返回 400 错误

如何在 ListView.builder 中扩展文本?