<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gesture on Website of SauceWu</title><link>https://saucewu.github.io/tags/gesture/</link><description>Recent content in Gesture on Website of SauceWu</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 10 Apr 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://saucewu.github.io/tags/gesture/index.xml" rel="self" type="application/rss+xml"/><item><title>Flutter 手势系统与竞技场机制详解</title><link>https://saucewu.github.io/posts/flutter-%E6%89%8B%E5%8A%BF%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%AB%9E%E6%8A%80%E5%9C%BA%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/</link><pubDate>Fri, 10 Apr 2026 10:00:00 +0000</pubDate><guid>https://saucewu.github.io/posts/flutter-%E6%89%8B%E5%8A%BF%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%AB%9E%E6%8A%80%E5%9C%BA%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/</guid><description>&lt;h1 id="flutter-手势系统与竞技场机制详解"&gt;Flutter 手势系统与竞技场机制详解&lt;/h1&gt;
&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一、Gesture Arena（手势竞技场）运行原理&lt;/li&gt;
&lt;li&gt;二、与 Android 触摸分发机制的核心区别&lt;/li&gt;
&lt;li&gt;三、OneSequenceGestureRecognizer 生命周期详解&lt;/li&gt;
&lt;li&gt;四、MultiTapGestureRecognizer 使用场景与区别&lt;/li&gt;
&lt;li&gt;五、GestureArenaTeam 实际应用场景&lt;/li&gt;
&lt;li&gt;六、总结&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="一gesture-arena手势竞技场运行原理"&gt;一、Gesture Arena（手势竞技场）运行原理&lt;/h1&gt;
&lt;h2 id="1-两层触摸模型"&gt;1. 两层触摸模型&lt;/h2&gt;
&lt;p&gt;Flutter 的触摸处理分为两层：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层级&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;th&gt;对应类&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pointer&lt;/td&gt;
&lt;td&gt;原始触摸事件（down / move / up）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PointerEvent&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gesture&lt;/td&gt;
&lt;td&gt;语义手势（tap、drag、scale 等）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GestureRecognizer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pointer 层不做任何裁决，&lt;strong&gt;所有命中节点都会收到完整的 PointerEvent 序列&lt;/strong&gt;。Gesture Arena 工作在 Gesture 层，负责在多个识别器之间做出唯一裁决。&lt;/p&gt;</description></item><item><title>Flutter K线系统拆解（四）：交互体系与性能工程</title><link>https://saucewu.github.io/posts/flutter-k%E7%BA%BF%E7%B3%BB%E7%BB%9F%E6%8B%86%E8%A7%A3%E5%9B%9B%E4%BA%A4%E4%BA%92%E4%BD%93%E7%B3%BB%E4%B8%8E%E6%80%A7%E8%83%BD%E5%B7%A5%E7%A8%8B/</link><pubDate>Mon, 07 Apr 2025 13:15:00 +0900</pubDate><guid>https://saucewu.github.io/posts/flutter-k%E7%BA%BF%E7%B3%BB%E7%BB%9F%E6%8B%86%E8%A7%A3%E5%9B%9B%E4%BA%A4%E4%BA%92%E4%BD%93%E7%B3%BB%E4%B8%8E%E6%80%A7%E8%83%BD%E5%B7%A5%E7%A8%8B/</guid><description>&lt;h1 id="flutter-k线系统拆解四交互体系与性能工程"&gt;Flutter K线系统拆解（四）：交互体系与性能工程&lt;/h1&gt;
&lt;h2 id="为什么交互比指标更容易暴露问题"&gt;为什么交互比指标更容易暴露问题&lt;/h2&gt;
&lt;p&gt;很多交易页在功能上都能“跑起来”，但只要用户开始频繁缩放、拖动、长按，体验差异会立刻被放大。&lt;br&gt;
体感里的“丝滑”和“卡顿”，通常不来自单一 bug，而是交互链路里多个小问题叠加：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;手势事件触发过密&lt;/li&gt;
&lt;li&gt;状态更新范围过大&lt;/li&gt;
&lt;li&gt;动画和计算抢同一帧预算&lt;/li&gt;
&lt;li&gt;非关键绘制在高频交互里持续执行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以这一篇的重点不是“某个技巧”，而是如何把交互链路做成一套稳定的工程系统。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一交互设计里的三个关键决定"&gt;一、交互设计里的三个关键决定&lt;/h2&gt;
&lt;h3 id="1-方向锁定先判断用户意图再决定谁接管手势"&gt;1) 方向锁定：先判断用户意图，再决定谁接管手势&lt;/h3&gt;
&lt;p&gt;在图表可编辑、页面又可滚动的场景里，方向锁是刚需。&lt;br&gt;
当手势轨迹偏垂直时，把事件交给外层滚动容器；偏水平时再由图表处理，这能明显减少“手势打架”。&lt;/p&gt;
&lt;p&gt;方向锁不是锦上添花，而是复杂页面里“能不能用”的分水岭。&lt;/p&gt;
&lt;h3 id="2-状态分离长按拖拽缩放不要混成一个开关"&gt;2) 状态分离：长按、拖拽、缩放不要混成一个开关&lt;/h3&gt;
&lt;p&gt;把 &lt;code&gt;isLongPress&lt;/code&gt;、&lt;code&gt;isDrag&lt;/code&gt;、&lt;code&gt;isScale&lt;/code&gt; 独立维护，收益很直接：&lt;br&gt;
状态更可控、回归更容易、边界问题更少。&lt;br&gt;
尤其在十字线与拖拽共存时，状态分离可以显著降低互相干扰。&lt;/p&gt;
&lt;h3 id="3-绘制隔离高频区域和低频区域分开"&gt;3) 绘制隔离：高频区域和低频区域分开&lt;/h3&gt;
&lt;p&gt;给图表主体加 &lt;code&gt;RepaintBoundary&lt;/code&gt;，本质是在缩小重绘传播范围。&lt;br&gt;
在包含导航栏、侧边信息、浮层工具条的复杂页面里，这个动作通常会带来稳定的帧率收益。&lt;/p&gt;</description></item></channel></rss>