美文网首页
Flutter 之 交互

Flutter 之 交互

作者: Cat_uncle | 来源:发表于2022-03-09 19:41 被阅读0次

手势操作在 Flutter 中分为两类:

第一类是原始的指针事件(Pointer Event),即原生开发中常见的触摸事件,表示屏幕上触摸(或鼠标、手写笔)行为触发的位移行为;

第二类则是手势识别(Gesture Detector),表示多个原始指针事件的组合操作,如点击、双击、长按等,是指针事件的语义化封装。

指针事件表示用户交互的原始触摸数据,如手指接触屏幕 PointerDownEvent、手指在屏幕上移动 PointerMoveEvent、手指抬起 PointerUpEvent,以及触摸取消 PointerCancelEvent。在手指接触屏幕,触摸事件发起时,Flutter 会确定手指与屏幕发生接触的位置上究竟有哪些组件,并将触摸事件交给最内层的组件去响应。事件会从这个最内层的组件开始,沿着组件树向根节点向上冒泡分发。通过 hitTestBehavior 去调整组件在命中测试期内应该如何表现,比如把触摸事件交给子组件,或者交给其视图层级之下的组件去响应。关于组件层面的原始指针事件的监听,Flutter 提供了 Listener Widget,可以监听其子 Widget 的原始指针事件。

Listener(

  child: Container(

    color: Colors.black,

    width: 300,

    height: 300,

  ),

  onPointerDown: (event) => print("down $event"),// 手势按下回调

  onPointerMove:  (event) => print("move $event"),// 手势移动回调

  onPointerUp:  (event) => print("up $event"),// 手势抬起回调

);

Gesture 是手势语义的抽象,而如果我们想从组件层监听手势,则需要使用 GestureDetector。GestureDetector 是一个处理各种高级用户触摸行为的 Widget,与 Listener 一样,也是一个功能性组件。

GestureDetector(// 手势识别

        child: Container(color: Colors.red,width: 50,height: 50),// 红色子视图

        onTap: ()=>print("Tap"),// 点击回调

        onDoubleTap: ()=>print("Double Tap"),// 双击回调

        onLongPress: ()=>print("Long Press"),// 长按回调

        onPanUpdate: (e) {// 拖动回调

          setState(() {

            // 更新位置

            _left += e.delta.dx;

            _top += e.delta.dy;

          });

        },

      ),

相关文章

网友评论

      本文标题:Flutter 之 交互

      本文链接:https://www.haomeiwen.com/subject/xdfxdrtx.html