我有一个我正在尝试创建的堆栈小部件,其中: 1. 用户触摸小部件按钮触发 pointerDown 事件。 2. 指针向下导致 slider 类型小部件从按钮后面从 0 缩放到 100% 3. 手指仍然向下,用户拖动以选择刻度上的一个值 4. 通过从屏幕上松开手指来选择值,即 pointerUp。
当我在步骤 1 中使用 onTap 而不是 pointerDown 时,小部件工作正常。但是当我尝试使用指针向下事件时,不会触发 _open 方法(管理 slider 的 scaleUp)。
我几乎完全遵循了这个例子:https://fireship.io/lessons/flutter-radial-menu-staggered-animations/ ,但已尝试像这样更改 floatingActionbuton 上的触摸事件:
Transform.scale(
scale: widget.scale.value,
child: Listener(
onPointerDown: (PointerDownEvent event) {
print('pointer is down');
setState(() {
_open;
});
},
child: FloatingActionButton(child: Icon(Icons.blur_circular), onPressed: () {})),
)
打印部分检测并触发事件,但 _open 方法不执行任何操作,菜单部分也没有像教程链接中那样出现。
我很茫然。
最佳答案
由于 FloatingActionButton
下方的按钮也有一个监听器,因此 Listener
小部件不会获取 PointerDown
事件。因此,要做到这一点,您必须将行为更改为 opaque
,以便两者都能获得事件。
尝试这样的事情:
Listener(
behavior: HitTestBehavior.opaque,
onPointerDown: (PointerDownEvent details){
},
child: ...,
)
关于Flutter PointerEvent 与 OnTap,一个有效,另一个无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232028/