在Flutter中我們在 Widget 實現(xiàn)一些手勢交互通常會使用 GestureDetector 裝飾器來實現(xiàn),但是默認情況下, widget 是支持多點觸控,但是在一些特定需求下,我們不需要多點觸控的操作,或者多點觸控反而給一些功能帶來麻煩,而且比較不方便的是,多點觸控無法通過操作 widget 或者 GestureDetector 來屏蔽掉。查閱了官方文檔發(fā)現(xiàn)的這個玩意: RawGestureDetector
在青羊等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站建設、成都網(wǎng)站設計 網(wǎng)站設計制作按需策劃,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設,青羊網(wǎng)站建設費用合理。
大概意思是:一個小部件,用于檢測由給定手勢工廠描述的手勢。對于常用手勢,請使用GestureRecognizer。 RawGestureDetector主要在開發(fā)自己的手勢識別器時很有用。
例如:
我們可以通過RawGestureDetector來自定義手勢。
有時,你可能需要禁用多點觸摸或在Flutter應用程序中點擊小部件。 例如,有一個列表,并且一次只能單擊其中一項。 您不希望用戶同時用三個手指點擊或觸摸并立即選擇三個項?;旧希乐褂脩舳啻吸c擊或多點觸摸。
我們先創(chuàng)建一個簡單的頁面,頁面加載一個 ListView.builder() ,
這個列表上的cell都支持多點觸控,效果圖:
【圖】
Flutter允許在 GestureRecognizer 基類的幫助下創(chuàng)建自定義手勢識別器小部件。 該類已經(jīng)有兩個抽象的實現(xiàn),可以實現(xiàn)多次輕擊和單次輕擊手勢。
首先創(chuàng)建一個自定義窗口小部件,以使其子窗口小部件只能具有單一觸摸手勢。
在 build() 方法中,我們將返回僅支持單點觸摸手勢的手勢檢測器小部件。 因此,我們?yōu)榇藙?chuàng)建另一個名為 _SingleTouchRecognizer 的類
現(xiàn)在我們回到我們的 SingleTouchRecognizerWidget 中,通過 RawGestureDetector 裝飾器來定義我們剛才創(chuàng)建的單擊手勢檢測器:
現(xiàn)在, build() 方法返回了一個 RawGestureDetector ,該 RawGestureDetector 處理 _SingleTouchRecognizer 類中的手勢。接下來,我們需要在識別器類中實現(xiàn)這些方法。我們首先覆蓋 GestureRecognizer 的 addAllowedPointer 方法。
在這里, startTrackingPointer 方法注冊了將由識別器處理的相關(guān)事件。 然后, resolve() 負責確保是否允許繼續(xù)進行觸摸事件。
如果我們傳入 GestureDisposition.rejected ,則當前的觸摸事件無法處理。 因此,此觸摸事件將被傳遞并允許其繼續(xù)。 但是,如果傳遞了 GestureDisposition.accepted ,則將解析觸摸事件,并且不會再調(diào)用其他事件。
通過handleEvent函數(shù)重置控制變量_p的值。
這樣就完成了_SingleTouchRecognizer類的實現(xiàn)。
現(xiàn)在,只需要將該 Widget 包裹在想要支持單點觸控的 widget 外層即可。
參考文獻:
disable-multi-touch-on-a-widget-in-flutter
api.flutter.dev
在Flutter中,我們可以使用Image控件來顯示圖片,一般來講我們的圖片資源都來源于網(wǎng)絡或者本地圖片。
Flutter中的Image也是類似。
我們先來看看Image的構(gòu)造方法
下面我們來看看其常用的屬性
可以看到,其常用屬性跟前端中的css很像。
下面我們來簡單用一用Image控件
首先是必填參數(shù)image,它接收一個ImageProvider類型的值。ImageProvider是一個抽象類,他下面有下圖這些實現(xiàn)類,由下面這些實現(xiàn)類可以看出,image是可以從資源,內(nèi)存,網(wǎng)絡,和文件中獲取圖片。
我們先來試試加載網(wǎng)絡圖片
首先看看NetworkImage構(gòu)造方法,很簡單,傳個url就可以了
如下:
嗯,就是這么簡單。其他3種情況使用也是類似的,自行看源碼即可。
實際上,F(xiàn)lutter給我們提供了擴展方法,使用起來更加簡單,通常我們直接使用提供的擴展方法即可
如下
可以看到,他們的構(gòu)造方法基本類似。
所以我們也可以這樣寫,跟上面的效果是一致的。
大致分為一下幾步
1.創(chuàng)建一個文件夾,用于存放圖片,如圖,我創(chuàng)建了一個imgs的文件夾,放了一張圖片
2.在pubspec.yaml中聲明資源,注意聲明的時候路徑和前面的-是有間隔的,不然的話會報#/properties/flutter/properties/assets: type: wanted [array] got -imgs/code.png
類似的錯誤,聲明完成后點擊右上方的packages get
或
下面我們再來看看其他屬性。
width,height
寬高沒什么好說的,就是設置寬度和高度
配合color使用,用于設置顏色的混合模式。BlendMode是一個枚舉,他有很多值
詳細解析還是看官方文檔吧,值太多了,我們隨便用用
用于設置圖片的填充方式,當圖片本身小于設置的寬高或者比父控件的寬高小時,我們可以設置該屬性控制圖片的顯示。
其值的類型是BoxFit。是個枚舉
具體含義還是直接看文檔即可
設置圖片的對齊方式,接收一個Alignment類型的值,值如下,很好理解
為了方便看效果我們在外邊套了個Container,簡單的把它理解為一個容器布局就可以了,類似于html中的div或android中的Layout,我們給Container設置了寬高和背景顏色。
bottomLeft效果如下,其他的自行嘗試
相對于Image,ICON可以像web一樣使用字體圖標,并且可以使用矢量圖,無需擔心失真的問題,并且體積相對較小。
我們先來看看其構(gòu)造方法
很簡單,我們直接來用一用
默認情況下,pubspec.yaml中uses-material-design的值為true.我們默認就可以使用Material Design字體圖標
Flutter是谷歌公司推出的跨終端的開發(fā)框架,支持Android、iOS和WEB終端。1.0版在2018年12月5日發(fā)布,目前的最新版本是1.5,它采用的開發(fā)語言是Dart,Dart也是谷歌開發(fā)的計算機編程語言,語法類似C,是編譯型語言:
hello world例子,打印字符串“Hello World!”:
1、沒有橋接層
React Native、Weex等技術(shù)都是跨終端的框架,然而性能跟原生App存在很大差距。這是由于它們的工作原理決定的:
React Native、Weex等技術(shù)多了一個橋接層,所以界面渲染會慢一些,由于UI渲染非常頻繁,想要不卡頓,基本上比較難,性能和用戶體驗跟原生代碼有差距。而這恰恰是Flutter的優(yōu)勢所在:
Dart可以被編譯成不同平臺的本地代碼,讓Flutter不通過橋接層直接跟平臺通信,自然性能會快一些。
2、編譯執(zhí)行
JavaScript是解釋執(zhí)行的,Dart是編譯執(zhí)行的,性能誰好一目了然。
3、Flutter Engine虛擬機
Flutter是依靠Flutter Engine虛擬機在iOS和Android上運行的,F(xiàn)lutter Engine使用C/C++編寫,開發(fā)人員通過Flutter框架直接和API在內(nèi)部進行交互,所以具有輸入低延遲和UI渲染高幀速率的特點。除了這特點之外,F(xiàn)lutter還提供了自己的小部件,F(xiàn)lutter小部件是使用從React獲取靈感的現(xiàn)代框架構(gòu)建的。 中心思想是您使用小部件構(gòu)建UI。
窗口小部件根據(jù)其當前配置和狀態(tài)描述了它們的視圖。 當窗口小部件的狀態(tài)發(fā)生更改時,窗口小部件會重建其描述,框架將根據(jù)前面的描述進行區(qū)分,以確定底層呈現(xiàn)樹從一個狀態(tài)轉(zhuǎn)換到下一個狀態(tài)所需的最小更改。可以直接在OS平臺提供的畫布上進行描繪,也就是一些核心類庫直接放到虛擬機里面,調(diào)用起來更快。
從它的系統(tǒng)結(jié)構(gòu)可以看出,類似安卓的ART(Android Run Time)虛擬機,同樣采用AOT(Ahead of TIme)技術(shù),會在APP安裝時就編譯成機器語言,不再解釋執(zhí)行,從而優(yōu)化了APP運行的性能。
4、自帶渲染引擎
Flutter使用谷歌自己的Skia渲染引擎,而Android系統(tǒng)自帶Skia引擎,iOS平臺上Flutter也會把Skia引擎打包到APP中,從而實現(xiàn)了高效渲染。而React Native通過橋接層訪問原生UI,操作頻繁就容易出性能問題。
綜合所述,F(xiàn)lutter 是性能最接近原生代碼 的一種開發(fā)框架,未來也會是構(gòu)建谷歌Fuchsia應用的主要方式,前途不可限量,唯一的問題就是需要學習一門新的語言:Dart,而有Java或者C#語言基礎的程序員會比較容易學習。
眾所周知,小程序是由HTML標簽來開發(fā)原生組件,那么首先需要將HTML做解析,這里我們將HTML通過node腳本解析成JSON字符串,再用Dart來解析JSON,映射對應的標簽到flutter的組件。這里先簡單介紹實現(xiàn)的功能以及展示效果,后續(xù)再詳細介紹。
為了高效解析,直接用flutter的組件名在HTML文件上開發(fā)
直接使用flutter的組件
模仿微信小程序的Api,cc對應是微信小程序的wx
以上HTML中的例子
《使用Flutter + V8/JsCore開發(fā)小程序引擎(二)》
《使用Flutter + V8/JsCore開發(fā)小程序引擎(三)》
網(wǎng)站標題:flutter小部件開發(fā),flutter 常用組件
本文鏈接:http://aaarwkj.com/article28/dsshdjp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站建設、網(wǎng)站制作、網(wǎng)站排名、網(wǎng)頁設計公司、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)