当前位置: 首页 > news >正文

flutter事件与消息通知

事件与消息通知

一、原始指针事件(触摸事件)

  • 命中测试

    • 事件阶段:手指按下、手指移动、手指抬起
    • 事件冒泡,无法停止冒泡
  • Listener 组件:监听原始触摸事件

    • onPointerDown:手指按下回调
    • onPointerMove:手指移动回调
    • onPointerUp:手指抬起回调
    • onPointerCancel:触摸事件取消回调
    • behavior:决定子组件如何响应命中测试
    • 参数 PointerDownEvent、 PointerMoveEvent、 PointerUpEvent 都是PointerEvent的子类,PointerEvent类中包括当前指针的信息
      • position:是指针相对于当对于全局坐标的偏移
      • localPosition: 是指针相对于本身布局坐标的偏移
      • delta:两次指针移动事件(PointerMoveEvent)的距离
      • pressure:按压力度,如果手机屏幕不支持压力传感器,则始终为1
      • orientation:指针移动方向,是一个角度值
  • 忽略指针事件(阻止子树接收指针事件)

    • AbsorbPointer:本身会参与命中测试,即本身是可以接收指针事件的(但其子树不行)
    • IgnorePointer:本身不会参与指针事件,即不可以接收指针事件

二、手势识别

  • GestureDetector:用于手势识别
    • onPanDown:手指按下
    • onDoubleTap:双击
    • onLongPress:长按
    • onPanUpdate:拖动更新
    • onPanEnd:滑动结束
    • onVerticalDragUpdate:垂直方向拖动
    • onScaleUpdate:缩放更新
  • GestureRecognizer:通过Listener来将原始指针事件转换为语义手势

三、事件机制

  • 事件处理流程
    • 深度优先遍历渲染树,依次进行【命中测试】->【事件分发】->【事件清理】
  • 命中测试
    • 如果当前节点有子节点通过了命中测试或者当前节点自己通过了命中测试,则将当前节点添加到HitTestResult列表中
    • 如果通过命中测试,子组件会比父组件会先被加入HitTestResult列表中
  • 事件分发
    • 遍历HitTestResult列表,调用每个节点的handleEvent 方法

四、手势原理与手势冲突

  • 原理待详述
  • 解决手势冲突
    • 使用 Listener。 竞争只是针对手势的,而 Listener 是监听原始指针事件,原始指针事件并非语义话的手势,所以根本不会走手势竞争的逻辑,相当于跳出了手势识别那套规则。
    • 自定义手势识别器( Recognizer)

五、事件总线

  • 订阅者模式
  • 单例模式
    • Dart中实现单例模式的标准做法就是使用static变量+工厂构造函数的方式
    //订阅者回调签名
    typedef void EventCallback(arg);class EventBus {//私有构造函数EventBus._internal();//保存单例static EventBus _singleton = EventBus._internal();//工厂构造函数factory EventBus
http://www.lryc.cn/news/427918.html

相关文章:

  • Oracle PL/SQL存储过程和函数简单示例
  • 同态加密和SEAL库的介绍(十)CKKS 参数心得 2
  • Debug-021-el-table实现分页多选的效果(切换分页,仍可以保持前一页的选中效果)
  • FPGA开发——DS18B20读取温度并且在数码管上显示
  • 电流测量分流电阻
  • MES系统:智能化排班排产的全面解决方案
  • 50道深度NLP和人工智能领域面试题+答案
  • 最小矩阵宽度(85%用例)C卷(JavaPythonC++Node.jsC语言)
  • STM32数据按字符截取与转换
  • 使用kubeadm快速部署一套K8S集群
  • 【Kotlin】在Kotlin项目中使用AspectJ
  • web实现drag拖拽布局
  • Linux网络编程—listen、accept、connect
  • logback.xml自定义标签节点
  • 探索DevExpress WinForms:.NET世界中的UI库之星
  • 零基础学习Redis(4) -- 常用数据结构介绍
  • Python实现水果忍者(开源)
  • Windows自动化3️⃣WindowsPC拽起时长问题解决方案
  • 一篇文章入门Java虚拟机(JVM)
  • vue3里面的组件实例类型(包括原生的html标签类型)
  • 谷歌正式开放Imagen 3访问权限!OpenAI的GPT-4o连续两周迎来两次更新!|AI日报
  • C语言内存操作函数
  • 深入探索 PyTorch:torch.nn.Parameter 与 torch.Tensor 的奥秘
  • 成为Python砖家(1): 在本地查询Python HTML文档
  • 深度学习基础—RMSprop算法与Adam 优化算法
  • 单片机原理及技术(六)—— 中断系统的工作原理
  • Angular路由使用
  • 【JVM】深入理解类加载机制(一)
  • 区块链浏览器需求整理
  • Laravel 表单验证功能重定向判断