资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

flutter滑动与触摸,flutter悬浮在桌面上按钮

flutter 中监听滑动事件

在移动端,各个平台或 UI 系统的原始指针事件模型基本都是一致,即:一次完整的事件分为三个阶段:手指按下、手指移动、和手指抬起,而更高级别的手势(如点击、双击、拖动等)都是基于这些原始事件的。

创新互联提供高防物理服务器租用、云服务器、香港服务器、香港机房服务器托管

Flutter 中可以使用 Listener widget 来监听原始触摸事件,它也是一个功能性 widget。

Listener 的常见属性

用法如下:

加载更多需要对 ListView 进行监听,所以需要进行监听器的设置,在 State 中进行监听器的初始化。

2、使用上述的 Listener 来监听,通过 Listener 的 onPointerMove(手指在屏幕上滑动)来监听滑动的距离,当滑动到底部时加载更多数据

Flutter 滑动、缩放控件

onInteractionEnd 交互结束

onInteractionStart 交互开始

onInteractionUpdate 滑动时候一直会回调

focalPoint 是相对于屏幕左上角的偏移量。

localFocalPoint是相对于父容器区域左上角的偏移量。

scale缩放量。

horizontalScale水平缩放量。

verticalScale竖直缩放量。

rotation旋转量。------ 这里说明能监听到旋转量

还可以通过transformationController进行变换控制,有兴趣的可以自己研究。

参考文章

Flutter了解之手势

描述了屏幕上指针(触摸、鼠标、触控笔)的位置和移动。

Flutter中可以使用Listener(功能性组件)来监听原始触摸事件

例1

例2

例3

忽略PointerEvent

手势: 描述由一个或多个指针移动组成的语义动作,如拖动、缩放、双击等。

Material大多数widget已经对tap或手势做出了响应。 例如 IconButton和 FlatButton 响应单击,ListView响应滑动事件触发滚动。

用于手势识别的功能性组件,通过它可以来识别各种手势。

例(单击)

例(添加Material触摸水波效果 InkWell组件)

例(滑动关闭 Dismissable组件)

例(单击、双击、长按)

例(滑动)

例(扫动---单一方向)

例(缩放)

GestureRecognizer是一个抽象类。

一种手势的识别器对应一个GestureRecognizer的子类。

由于手势竞争最终只有一个胜出者,所以,当有多个手势识别器时,可能会产生冲突。

在APP中经常会需要一个广播机制,用以跨页面通知。比如一个需要登录的APP中,页面会关注用户登录或注销事件,来进行一些状态更新。

这时候,一个事件总线便会非常有用,事件总线通常实现了订阅者模式,订阅者模式包含发布者和订阅者两种角色,可以通过事件总线来触发事件和监听事件。

对于一些简单的应用,事件总线是足以满足业务需求的,如果决定使用状态管理包的话,一定要想清楚APP是否真的有必要使用它,防止“化简为繁”、过度设计。

在widget树中,每一个节点都可以分发通知,通知会沿着当前节点向上传递,所有父节点都可以通过NotificationListener来监听通知。

Flutter中将这种由子向父的传递通知的机制称为通知冒泡(Notification Bubbling)。

通知冒泡和用户触摸事件冒泡是相似的,但有一点不同:通知冒泡可以中止,但用户触摸事件不行。

通知冒泡和Web开发中浏览器事件冒泡原理是相似的,都是事件从出发源逐层向上传递,可以在上层节点任意位置来监听通知/事件,也可以终止冒泡过程,终止冒泡后,通知将不会再向上传递。

Flutter的UI框架实现中,除了在可滚动组件在滚动过程中会发出ScrollNotification之外,还有一些其它的通知,如SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等,Flutter正是通过这种通知机制来使父元素可以在一些特定时机来做一些事情。

阻止冒泡

通知冒泡原理


分享文章:flutter滑动与触摸,flutter悬浮在桌面上按钮
文章转载:http://cdkjz.cn/article/dschcis.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220