Flutter是谷歌公司推出的跨終端的開發(fā)框架,支持Android、iOS和WEB終端。1.0版在2018年12月5日發(fā)布,目前的最新版本是1.5,它采用的開發(fā)語言是Dart,Dart也是谷歌開發(fā)的計算機編程語言,語法類似C,是編譯型語言:
成都創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設、網(wǎng)站重做改版、北屯網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5頁面制作、商城網(wǎng)站建設、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為北屯等各大城市提供網(wǎng)站開發(fā)制作服務。
hello world例子,打印字符串“Hello World!”:
1、沒有橋接層
React Native、Weex等技術都是跨終端的框架,然而性能跟原生App存在很大差距。這是由于它們的工作原理決定的:
React Native、Weex等技術多了一個橋接層,所以界面渲染會慢一些,由于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)代框架構建的。 中心思想是您使用小部件構建UI。
窗口小部件根據(jù)其當前配置和狀態(tài)描述了它們的視圖。 當窗口小部件的狀態(tài)發(fā)生更改時,窗口小部件會重建其描述,框架將根據(jù)前面的描述進行區(qū)分,以確定底層呈現(xiàn)樹從一個狀態(tài)轉換到下一個狀態(tài)所需的最小更改。可以直接在OS平臺提供的畫布上進行描繪,也就是一些核心類庫直接放到虛擬機里面,調(diào)用起來更快。
從它的系統(tǒng)結構可以看出,類似安卓的ART(Android Run Time)虛擬機,同樣采用AOT(Ahead of TIme)技術,會在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ā)框架,未來也會是構建谷歌Fuchsia應用的主要方式,前途不可限量,唯一的問題就是需要學習一門新的語言:Dart,而有Java或者C#語言基礎的程序員會比較容易學習。
1、《我一無所求》
我一無所求,只站在林邊樹后。倦意還逗留在黎明的眼上,露潤在空氣里。
濕草的懶味懸垂在地面的薄霧中。在榕樹下你用乳油般柔嫩的手擠著牛奶。
我沉靜地站立著。我沒有走近你。
天空和廟里的鑼聲一同醒起。街塵在驅(qū)走的牛蹄下飛揚。
把汩汩發(fā)響的水瓶摟在腰上,女人們從河邊走來。
你的釧鐲丁當,乳沫溢出罐沿。晨光漸逝而我沒有步近你。
2、《當時光已逝》
假如時光已逝,鳥兒不再歌唱,風兒也吹倦了,那就用黑暗的厚幕把我蓋上,如同黃昏時節(jié)你用睡眠的衾被裹住大地,又輕輕合上睡蓮的花瓣。
路途未完,行囊已空,衣裳破裂污損,人已精疲力竭。你驅(qū)散了旅客的羞愧和困窘,使他在你仁慈的夜幕下,如花朵般煥發(fā)生機。在你慈愛的夜幕下蘇醒。
3、《假如你一定要傾心于我》
假如你一定要傾心于我,你的生活就會充滿憂慮我的家在十字路口,房門洞開著,我心不在焉--因為我再唱歌。
假如你一定要傾心于我 ,我決不會用我的心來回報。倘若我的歌兒是愛的海誓山盟,請你原諒,當樂曲平息時我的信證也不復存在,因為隆冬季節(jié),誰會恪守五月的誓約。
假如你一定要傾心于我,請不要把它時刻記在心頭當你笑語盈盈,一雙明眸閃著愛的歡樂,我的回答必然是狂熱而草率的,一點兒也不切合實際--你應把它銘記在心,然后再把它永遠忘卻。
4、《不要不辭而別,我愛》
不要不辭而別,我愛。我看望了一夜,現(xiàn)在我臉上睡意重重。
只恐我在睡中把你丟失了。不要不辭而別,我愛。
我驚起伸出雙手去摸觸你, 我問自己說:“這是一個夢么?”
但愿我能用我的心系住你的雙足,緊抱在胸前!不要不辭而別,我愛。
5、《生如夏花》
我聽見回聲,來自山谷和心間。以寂寞的鐮刀收割空曠的靈魂。
不斷地重復決絕,又重復幸福。終有綠洲搖曳在沙漠。
我相信自己。生來如同璀璨的夏日之花。不凋不敗,妖治如火。承受心跳的負荷和呼吸的累贅。樂此不疲。
我聽見音樂,來自月光和胴體。輔極端的誘餌捕獲飄渺的唯美。一生充盈著激烈,又充盈著純?nèi)弧?傆谢貞涁灤┯谑篱g。
我相信自己。死時如同靜美的秋日落葉。不盛不亂,姿態(tài)如煙。即便枯萎也保留豐肌清骨的傲然。玄之又玄
我聽見愛情,我相信愛情。愛情是一潭掙扎的藍藻。如同一陣凄微的風。穿過我失血的靜脈。駐守歲月的信念。
我相信一切能夠聽見。甚至預見離散,遇見另一個自己。而有些瞬間無法把握
任憑東走西顧,逝去的必然不返。請看我頭置簪花,一路走來一路盛開。頻頻遺漏一些,。又深陷風霜雨雪的感動
般若波羅蜜,一聲一聲。生如夏花,死如秋葉。還在乎擁有什么。
(該路徑會有變化,可以關注Flutter社區(qū),隨時更新)
Documents為目錄,fluttersdk為sdk文件夾
cd 到對應的項目工程中執(zhí)行命令:
在終端中執(zhí)行 flutter doctor 查看Android和iOS的開發(fā)環(huán)境,監(jiān)測到依賴若有缺失,會給出缺失的依賴的安裝結果,依照提示進行安裝即可。
在命令終端執(zhí)行相關命令:
打開Android Studio應用,打開菜單項Preferences Plugins中搜索Flutter插件并點擊install進行安裝
打開 VS Code,可點擊 View - Command Palette,搜索flutter并點擊install進行安裝
描述了屏幕上指針(觸摸、鼠標、觸控筆)的位置和移動。
Flutter中可以使用Listener(功能性組件)來監(jiān)聽原始觸摸事件
例1
例2
例3
忽略PointerEvent
手勢: 描述由一個或多個指針移動組成的語義動作,如拖動、縮放、雙擊等。
Material大多數(shù)widget已經(jīng)對tap或手勢做出了響應。 例如 IconButton和 FlatButton 響應單擊,ListView響應滑動事件觸發(fā)滾動。
用于手勢識別的功能性組件,通過它可以來識別各種手勢。
例(單擊)
例(添加Material觸摸水波效果 InkWell組件)
例(滑動關閉 Dismissable組件)
例(單擊、雙擊、長按)
例(滑動)
例(掃動---單一方向)
例(縮放)
GestureRecognizer是一個抽象類。
一種手勢的識別器對應一個GestureRecognizer的子類。
例
由于手勢競爭最終只有一個勝出者,所以,當有多個手勢識別器時,可能會產(chǎn)生沖突。
例
例
在APP中經(jīng)常會需要一個廣播機制,用以跨頁面通知。比如一個需要登錄的APP中,頁面會關注用戶登錄或注銷事件,來進行一些狀態(tài)更新。
這時候,一個事件總線便會非常有用,事件總線通常實現(xiàn)了訂閱者模式,訂閱者模式包含發(fā)布者和訂閱者兩種角色,可以通過事件總線來觸發(fā)事件和監(jiān)聽事件。
對于一些簡單的應用,事件總線是足以滿足業(yè)務需求的,如果決定使用狀態(tài)管理包的話,一定要想清楚APP是否真的有必要使用它,防止“化簡為繁”、過度設計。
例
在widget樹中,每一個節(jié)點都可以分發(fā)通知,通知會沿著當前節(jié)點向上傳遞,所有父節(jié)點都可以通過NotificationListener來監(jiān)聽通知。
Flutter中將這種由子向父的傳遞通知的機制稱為通知冒泡(Notification Bubbling)。
通知冒泡和用戶觸摸事件冒泡是相似的,但有一點不同:通知冒泡可以中止,但用戶觸摸事件不行。
通知冒泡和Web開發(fā)中瀏覽器事件冒泡原理是相似的,都是事件從出發(fā)源逐層向上傳遞,可以在上層節(jié)點任意位置來監(jiān)聽通知/事件,也可以終止冒泡過程,終止冒泡后,通知將不會再向上傳遞。
Flutter的UI框架實現(xiàn)中,除了在可滾動組件在滾動過程中會發(fā)出ScrollNotification之外,還有一些其它的通知,如SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等,F(xiàn)lutter正是通過這種通知機制來使父元素可以在一些特定時機來做一些事情。
例
例
例
阻止冒泡
通知冒泡原理
透明視頻動畫是目前比較流行的實現(xiàn)動畫的一種, 大廠也相繼開源自己的框架,最終我們選中 騰訊vap ,它支持了Android、IOS、Web,為我們封裝flutter_vap提供了天然的便利,并且它提供了將幀圖片生成帶alpha通道視頻的工具,這簡直太贊了。
VAP(Video Animation Player)是企鵝電競開發(fā),用于播放酷炫動畫的實現(xiàn)方案。
video for youtube
video for qiniu
apk download
github