flutter - 在 Flutter 中,定位的 Widget 如何在其父 Stack 区域之外感觉到轻敲?
问题描述
AStack
包含MyWidget
在 a 中Positioned
。
Stack(
overflow: Overflow.visible,
children: [
Positioned(
top: 0.0,
left: 0.0,
child: MyWidget(),
)],
);
由于溢出是Overflow.visible
并且MyWidget
大于Stack
,它显示在 之外Stack
,这就是我想要的。
但是,我无法点击该区域MyWidget
之外的Stack
区域。它只是忽略了那里的水龙头。
我如何确保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
- 从上面添加了没有 _size.contains 检查的 hitTest 方法
- 复制 Positioned 并将其命名为 Positioned2 并使其引用 Stack2 作为其通用参数
- 在我的代码中使用了 Stack2 和 Positioned2
这个解决方案绝不是最优的,但它实现了预期的行为。
推荐阅读
- amazon-web-services - 设置 Cloudfront 时出现问题 - ''Miss'' 作为 result_type 和 x_edge_detailed 结果类型日志的结果
- c# - 表达式 OrderBy Then 通过返回 (Func
, IOrderedQueryable >) - ios - 想要限制一个imageView swift 5上的平移手势区域
- spss - 有没有办法在创建计算变量后查看/编辑计算变量的定义?
- vue.js - 当单击特定按钮时,特定按钮的加载器应在 vue js 中加载
- javascript - 为什么我在发送 post 请求时收到错误代码 401
- scala - 使用不同的数据框创建带有信息的新数据框(Scala Spark)
- laravel - 使用 vue-select 进行多选时出错
- c++ - Windows 是否在单独运行之间重现 malloc 指针?
- php - 从插件中删除操作