(1)在移动端,各个平台或UI系统的原始指针事件模型基本都是一致,即:一次完整的事件分为三个阶段:手指按下、手指移动、和手指抬起,而更高级别的手势(如点击、双击、拖动等)都是基于这些原始事件的。
当指针按下时,Flutter会对应用程序执行命中测试(Hit Test),以确定指针与屏幕接触的位置存在哪些widget。注意,只有通过命中测试的Widget才能触发事件。
(2)Flutter中可以使用Listener widget来监听原始触摸事件,它也是一个功能性widget。
Listener({
Key key,
this.onPointerDown, //手指按下回调
this.onPointerMove, //手指移动回调
this.onPointerUp,//手指抬起回调
this.onPointerCancel,//触摸事件取消回调
this.behavior = HitTestBehavior.deferToChild, //在命中测试期间如何表现
Widget child
})
(3)说说Listener behavior:
Widget getBody() {
return Container(
child: Listener(
child: ConstrainedBox(
constraints: BoxConstraints.tight(Size(double.infinity, double.infinity)),
child: Center(child: Text("Box A")),
),
//behavior: HitTestBehavior.opaque,
onPointerDown: (event) => print("down A")
),
);
}
说明:
(a)注释掉上面behavior时,只有点击Text("Box A")时,才会打印down A;点击Text之