手勢操作在 Flutter 中分為兩類:
成都創(chuàng)新互聯(lián)主打移動網(wǎng)站、成都網(wǎng)站建設、網(wǎng)站建設、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、申請域名、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。
第一類是原始的指針事件(Pointer Event),即原生開發(fā)中常見的觸摸事件,表示屏幕上觸摸(或鼠標、手寫筆)行為觸發(fā)的位移行為;
第二類則是手勢識別(Gesture Detector),表示多個原始指針事件的組合操作,如點擊、雙擊、長按等,是指針事件的語義化封裝。
指針事件表示用戶交互的原始觸摸數(shù)據(jù),如手指接觸屏幕 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;
? ? ? });
? ? },
? ),
背景:flutter組件嵌套都很深,依次傳遞數(shù)據(jù)很麻煩,所以最好是能夠跨組件傳遞。有三張跨組件的方式:InheritedWidget、Notification、Eventbus.
是一種自上而下的傳遞數(shù)據(jù)的方式。
使用步驟:
它的數(shù)據(jù)流動方式和InheritedWidget剛好相反,從子控件向上面?zhèn)鬟f。
具體使用
跟android 原生的eventbus原理和使用一樣。
1.環(huán)境準備, 參考鏈接
2.添加國內環(huán)境配置: 參考鏈接
3.新建
name: String類型,代表Channel的名字,也是其唯一標識符。
messager:BinaryMessenger類型,代表消息信使,是消息的發(fā)送與接收的工具。
codec: MessageCodec類型或MethodCodec類型,代表消息的編解碼器。
fluuter中的MessageCodec用于二進制格式數(shù)據(jù)與基礎數(shù)據(jù)之間的編解碼。BasicMessageChannel所使用的編解碼器就是MessageCodec。
iOS中,名稱為FlutterMessageCodec,是一個協(xié)議,定義了兩個方法:encode接收一個類型為id的消息,將其編碼為NSData類型,而decode接收NSData類型消息,將其解碼為id類型數(shù)據(jù)。
MessageCodec有多種不同的實現(xiàn):
與MessageCodec不同的是,MethodCodec用于MethodCall對象的編解碼,一個MethodCall對象代表一次從Flutter端發(fā)起的方法調用。MethodCall有2個成員變量:String類型的method代表需要調用的方法名稱,通用類型(Android中為Object,iOS中為id)的arguments代表需要調用的方法入?yún)?/p>
由于處理的是方法調用,故相比于MessageCodec,MethodCodec多了對調用結果的處理。當方法調用成功時,使用encodeSuccessEnvelope將result編碼為二進制數(shù)據(jù),而當方法調用失敗時,則使用encodeErrorEnvelope將error的code、message、detail編碼為二進制數(shù)據(jù)
MethodCodec有兩種實現(xiàn):
分享名稱:flutter數(shù)據(jù)交互,flutter數(shù)據(jù)共享
網(wǎng)頁路徑:http://jinyejixie.com/article22/dsdipjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、關鍵詞優(yōu)化、網(wǎng)站設計、電子商務、做網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)