Flutter 之 交互

手勢操作在 Flutter 中分為兩類:

第一類是原始的指針事件(Pointer Event),即原生開發(fā)中常見的觸摸事件,表示屏幕上觸摸(或鼠標、手寫筆)行為觸發(fā)的位移行為;

第二類則是手勢識別(Gesture Detector),表示多個原始指針事件的組合操作,如點擊、雙擊、長按等,是指針事件的語義化封裝。

指針事件表示用戶交互的原始觸摸數據,如手指接觸屏幕 PointerDownEvent、手指在屏幕上移動 PointerMoveEvent、手指抬起 PointerUpEvent,以及觸摸取消 PointerCancelEvent。在手指接觸屏幕,觸摸事件發(fā)起時,F(xiàn)lutter 會確定手指與屏幕發(fā)生接觸的位置上究竟有哪些組件,并將觸摸事件交給最內層的組件去響應。事件會從這個最內層的組件開始,沿著組件樹向根節(jié)點向上冒泡分發(fā)。通過 hitTestBehavior 去調整組件在命中測試期內應該如何表現(xiàn),比如把觸摸事件交給子組件,或者交給其視圖層級之下的組件去響應。關于組件層面的原始指針事件的監(jiān)聽,F(xiàn)lutter 提供了 Listener Widget,可以監(jiān)聽其子 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 是手勢語義的抽象,而如果我們想從組件層監(jiān)聽手勢,則需要使用 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;

? ? ? ? ? });

? ? ? ? },

? ? ? ),

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容