真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter前端框架,前端技術(shù)flutter

北大青鳥java培訓(xùn):web前端多端編程開發(fā)框架結(jié)構(gòu)?

隨著我們對(duì)web前端編程開發(fā)技術(shù)的掌握,越來(lái)越多的框架語(yǔ)言和架構(gòu)方式被我們所熟知。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、黃浦網(wǎng)絡(luò)推廣、成都小程序開發(fā)、黃浦網(wǎng)絡(luò)營(yíng)銷、黃浦企業(yè)策劃、黃浦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供黃浦建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

下面山西北大青鳥就一起來(lái)了解一下,web前端開發(fā)的一些常見框架結(jié)構(gòu)。

1.全包型這類框架大的特點(diǎn)就是從底層的渲染引擎、布局引擎,到中層的DSL,再到上層的框架全部由自己開發(fā),代表框架是Qt和Flutter。

這類框架優(yōu)點(diǎn)非常明顯:性能(的上限)高;各平臺(tái)渲染結(jié)果一致。

缺點(diǎn)也非常明顯:需要完全重新學(xué)習(xí)DSL(QML/Dart),以及難以適配中國(guó)特色的端:小程序。

這類框架是原始也是純正的的多端開發(fā)框架,由于底層到上層每個(gè)環(huán)節(jié)都掌握在自己手里,也能大可能地去保證開發(fā)和跨端體驗(yàn)一致。

但它們的框架研發(fā)成本巨大,渲染引擎、布局引擎、DSL、上層框架每個(gè)部分都需要大量人力開發(fā)維護(hù)。

2.Web技術(shù)型這類框架把Web技術(shù)(JavaScript,CSS)帶到移動(dòng)開發(fā)中,自研布局引擎處理CSS,使用JavaScript寫業(yè)務(wù)邏輯,使用流行的前端框架作為DSL,各端分別使用各自的原生組件渲染。

代表框架是ReactNative和Weex,這樣做的優(yōu)點(diǎn)有:開發(fā)迅速;復(fù)用前端生態(tài);易于學(xué)習(xí)上手,不管前端后端移動(dòng)端,多多少少都會(huì)一點(diǎn)JS、CSS。

缺點(diǎn)有:1.交互復(fù)雜時(shí)難以寫出高性能的代碼,這類框架的設(shè)計(jì)就必然導(dǎo)致JS和Native之間需要通信,類似于手勢(shì)操作這樣頻繁地觸發(fā)通信就很可能使得UI無(wú)法在16ms內(nèi)及時(shí)繪制。

ReactNative有一些聲明式的組件可以避免這個(gè)問題,但聲明式的寫法很難滿足復(fù)雜交互的需求。

2.由于沒有渲染引擎,使用各端的原生組件渲染,相同代碼渲染的一致性沒有一種高。

3.JavaScript編譯型這類框架就是我們這篇文章的主角們:Taro、WePY、uni-app、mpvue、chameleon,它們的原理也都大同小異:先以JavaScript作為基礎(chǔ)選定一個(gè)DSL框架,以這個(gè)DSL框架為標(biāo)準(zhǔn)在各端分別編譯為不同的代碼,各端分別有一個(gè)運(yùn)行時(shí)框架或兼容組件庫(kù)保證代碼正確運(yùn)行。

為什么Flutter開發(fā)APP性能最接近原生,前端程序員請(qǐng)關(guān)注

Flutter是谷歌公司推出的跨終端的開發(fā)框架,支持Android、iOS和WEB終端。1.0版在2018年12月5日發(fā)布,目前的最新版本是1.5,它采用的開發(fā)語(yǔ)言是Dart,Dart也是谷歌開發(fā)的計(jì)算機(jī)編程語(yǔ)言,語(yǔ)法類似C,是編譯型語(yǔ)言:

hello world例子,打印字符串“Hello World!”:

1、沒有橋接層

React Native、Weex等技術(shù)都是跨終端的框架,然而性能跟原生App存在很大差距。這是由于它們的工作原理決定的:

React Native、Weex等技術(shù)多了一個(gè)橋接層,所以界面渲染會(huì)慢一些,由于UI渲染非常頻繁,想要不卡頓,基本上比較難,性能和用戶體驗(yàn)跟原生代碼有差距。而這恰恰是Flutter的優(yōu)勢(shì)所在:

Dart可以被編譯成不同平臺(tái)的本地代碼,讓Flutter不通過橋接層直接跟平臺(tái)通信,自然性能會(huì)快一些。

2、編譯執(zhí)行

JavaScript是解釋執(zhí)行的,Dart是編譯執(zhí)行的,性能誰(shuí)好一目了然。

3、Flutter Engine虛擬機(jī)

Flutter是依靠Flutter Engine虛擬機(jī)在iOS和Android上運(yùn)行的,F(xiàn)lutter Engine使用C/C++編寫,開發(fā)人員通過Flutter框架直接和API在內(nèi)部進(jìn)行交互,所以具有輸入低延遲和UI渲染高幀速率的特點(diǎn)。除了這特點(diǎn)之外,F(xiàn)lutter還提供了自己的小部件,F(xiàn)lutter小部件是使用從React獲取靈感的現(xiàn)代框架構(gòu)建的。 中心思想是您使用小部件構(gòu)建UI。

窗口小部件根據(jù)其當(dāng)前配置和狀態(tài)描述了它們的視圖。 當(dāng)窗口小部件的狀態(tài)發(fā)生更改時(shí),窗口小部件會(huì)重建其描述,框架將根據(jù)前面的描述進(jìn)行區(qū)分,以確定底層呈現(xiàn)樹從一個(gè)狀態(tài)轉(zhuǎn)換到下一個(gè)狀態(tài)所需的最小更改??梢灾苯釉贠S平臺(tái)提供的畫布上進(jìn)行描繪,也就是一些核心類庫(kù)直接放到虛擬機(jī)里面,調(diào)用起來(lái)更快。

從它的系統(tǒng)結(jié)構(gòu)可以看出,類似安卓的ART(Android Run Time)虛擬機(jī),同樣采用AOT(Ahead of TIme)技術(shù),會(huì)在APP安裝時(shí)就編譯成機(jī)器語(yǔ)言,不再解釋執(zhí)行,從而優(yōu)化了APP運(yùn)行的性能。

4、自帶渲染引擎

Flutter使用谷歌自己的Skia渲染引擎,而Android系統(tǒng)自帶Skia引擎,iOS平臺(tái)上Flutter也會(huì)把Skia引擎打包到APP中,從而實(shí)現(xiàn)了高效渲染。而React Native通過橋接層訪問原生UI,操作頻繁就容易出性能問題。

綜合所述,F(xiàn)lutter 是性能最接近原生代碼 的一種開發(fā)框架,未來(lái)也會(huì)是構(gòu)建谷歌Fuchsia應(yīng)用的主要方式,前途不可限量,唯一的問題就是需要學(xué)習(xí)一門新的語(yǔ)言:Dart,而有Java或者C#語(yǔ)言基礎(chǔ)的程序員會(huì)比較容易學(xué)習(xí)。

Flutter入門這一篇效率文章就夠了

本文面向 Flutter 初學(xué)者,旨在用易懂的方式帶大家入門。除了 Flutter 代碼,還會(huì)介紹到語(yǔ)法、原理、特性等基礎(chǔ)知識(shí)。相信本文能幫助你學(xué)習(xí)和理解 Flutter。

我們先看一下目前的一些跨平臺(tái)方案,從前端渲染的角度來(lái)分類的話,大致可以分為以下幾種方案。

WebView 渲染

這種方案就很好理解,現(xiàn)在很多項(xiàng)目都會(huì)嵌入 H5 的頁(yè)面。就是用 JavaScript 等前端技術(shù)進(jìn)行開發(fā),在客戶端上用 WebView 來(lái)進(jìn)行渲染。微信小程序目前使用的就是這種方案。

它的優(yōu)點(diǎn)很明顯,使用成熟的前端技術(shù)進(jìn)行開發(fā),學(xué)習(xí)成本低,開發(fā)效率高,并且支持動(dòng)態(tài)發(fā)布代碼。

但缺點(diǎn)也很明顯,在性能體驗(yàn)上,和原生還是存在較大差距的。

原生控件渲染

既然 WebView 的性能不夠好,于是就有了使用原生控件進(jìn)行渲染的方案。這種方案,同樣也是使用 JavaScript 開發(fā),區(qū)別是它最終是調(diào)用原生控件進(jìn)行渲染的。這種方案的代表是 Facebook 的 React Native。

由于使用原生控件進(jìn)行渲染,性能體驗(yàn)也會(huì)更接近原生。但也只是更接近,和原生還是有差距的,因?yàn)樗枰l繁的進(jìn)行 JavaScript 和原生之間的通信,這個(gè)通信效率是比較低的。

另外,由于需要適配各個(gè)平臺(tái)的控件,那就有可能出現(xiàn),系統(tǒng)控件更新了,而框架本身還沒有更新,由此產(chǎn)生了一些問題。換句話說(shuō),這種方案是受到原生控件限制的。

繪圖引擎渲染

接下來(lái)就是主角了。

在前端,如果完全不使用原生控件,我們可以通過系統(tǒng)的繪圖 API 繪制出一個(gè)用戶界面。從這個(gè)角度出發(fā),可以在各個(gè)平臺(tái)使用一個(gè)統(tǒng)一接口的繪圖引擎來(lái)進(jìn)行界面繪制,這個(gè)引擎最終調(diào)用的是系統(tǒng)的 API 繪制的。這樣的話,它的性能可以做到接近原生,并且又不受原生控件的限制,在不同平臺(tái)上能夠做到 UI 統(tǒng)一。

Flutter 就是這樣的一個(gè)開發(fā)框架。

一個(gè)跨平臺(tái) UI 解決方案

Flutter 是由 Google 開發(fā)的,一個(gè)跨平臺(tái) UI 解決方案。換句話說(shuō),它原則上只管 UI 的問題,如果涉及到平臺(tái)本身的一些功能,比如調(diào)用藍(lán)牙、攝像頭,一般還是需要原生代碼去操作。但現(xiàn)在也會(huì)有一些第三方庫(kù)幫我們解決這些問題。

繪圖引擎 Skia

Flutter 使用 Skia 作為它的繪圖引擎。Skia 已經(jīng)被 Google 收購(gòu),目前很多 Google 旗下的產(chǎn)品都是用 Skia 繪制的,包括 Android。

Android 內(nèi)置了 Skia,但 iOS 沒有,所以在打 iOS 安裝包的時(shí)候,會(huì)把 Skia 一起打進(jìn)去。這就導(dǎo)致了,用同一份 Flutter 代碼打包之后,iOS 的包要比 Android 的包大一些。

開發(fā)語(yǔ)言 Dart

Flutter 使用的開發(fā)語(yǔ)言,叫 Dart。Dart 也是 Google 自家的,它是一門面向?qū)ο蟮恼Z(yǔ)言,從它身上會(huì)看到一些其他開發(fā)語(yǔ)言的影子。學(xué)習(xí)起來(lái)難度不大的。

前面講跨平臺(tái)方案的時(shí)候,可以發(fā)現(xiàn)別的方案基本都是用 JavaScript 作為開發(fā)語(yǔ)言的,但為什么 Flutter 不用?就因?yàn)?Dart 是谷歌自家的嗎?這個(gè)問題先留著,我們后面會(huì)提到。

這里部分就簡(jiǎn)單點(diǎn)帶過了,具體的搭建流程可以在官網(wǎng)查看:

主要的搭建步驟如下:

下載 Flutter SDK

官網(wǎng)下載地址:

由于在國(guó)內(nèi)訪問可能受限,官方為中國(guó)開發(fā)者搭建了鏡像:

更新環(huán)境變量

解壓后,將 flutter\bin 的全路徑添加到環(huán)境變量 PATH 中。

安裝開發(fā)工具

理論上,任何文本編輯器都可以用來(lái)開發(fā) Flutter 應(yīng)用,但推薦的開發(fā)工具是 Android Studio、IntelliJ 以及 VS Code。因?yàn)樵谶@些開發(fā)工具上,可以安裝官方的 Flutter 和 Dart 插件,得到更好的開發(fā)體驗(yàn)。文章里使用 Android Studio 來(lái)演示。

如果你打算開發(fā) iOS 應(yīng)用,則還需要安裝 Xcode。

安裝插件

在開發(fā)工具的插件設(shè)置中,安裝上面說(shuō)到的 Flutter 和 Dart 插件。Flutter 插件用于支持 Flutter 的運(yùn)行、調(diào)試、熱重載等功能,而 Dart 插件則提供了代碼的輸入校驗(yàn)、代碼補(bǔ)全等功能。

萬(wàn)物始于 Hello World,我們先來(lái)創(chuàng)建一個(gè)顯示 Hello World 的 Flutter 項(xiàng)目。

在 Android Studio 的歡迎頁(yè)面選擇 Start a new Flutter project ,或者通過菜單欄的 File New New Flutter Project ,創(chuàng)建一個(gè)新的 Flutter 項(xiàng)目。

創(chuàng)建好的項(xiàng)目里面包含了 android 和 ios 兩個(gè)文件夾,它們是標(biāo)準(zhǔn)的 Android 和 iOS 項(xiàng)目。我們的 Flutter 代碼,存放在 lib 文件夾里。項(xiàng)目創(chuàng)建好后,會(huì)默認(rèn)帶一個(gè)計(jì)數(shù)器的示例,我們不管它,把 main.dart 的代碼改成 Hello World:

啟動(dòng)一個(gè)模擬器,或者連上真機(jī),點(diǎn)擊 Run 運(yùn)行一下,就能看這樣一個(gè)界面了:

具體代碼先混個(gè)眼熟就好,具體的后面會(huì)再講到。

在寫 Flutter 之前,還要先跟大家簡(jiǎn)單介紹一下 Dart 的語(yǔ)法。如果你有 Java 或 JavaScript 的開發(fā)經(jīng)驗(yàn),以及面向?qū)ο蟮木幊趟枷耄瑢W(xué)起來(lái)是很快的。

我們可以在 test 文件夾下新建一個(gè) dart 文件,用來(lái)寫測(cè)試代碼。

指定類型

var

但和 JavaScript 不同的是,以下代碼在 JavaScript 是不會(huì)報(bào)錯(cuò)的,但在 Dart 里會(huì)報(bào)錯(cuò):

Object

如果非要上面這樣寫,那也可以。把 var 換成 Object 就不報(bào)錯(cuò)了:

和 Java 類似,Object 是所有對(duì)象的根基類。但是這樣的話,如果想打印一下 num 的字符串長(zhǎng)度,是會(huì)報(bào)錯(cuò)的:

因?yàn)?length 是屬于 String 的,但系統(tǒng)只知道 num 是一個(gè)對(duì)象,并不知道它是一個(gè) String。

dynamic

如果還是非要這樣寫,那也可以。Dart 有一個(gè)特有的關(guān)鍵字 dynamic,把 Object 改成 dynamic 就不報(bào)錯(cuò)了:

我們運(yùn)行一下這個(gè)文件,可以在控制臺(tái)看到正確打印出了字符串長(zhǎng)度。

函數(shù)

dynamic

在 Dart 里,函數(shù)也是可以不寫返回類型的,不寫的話會(huì)被當(dāng)做 dynamic 來(lái)處理。這樣的話,函數(shù)的類型就是 return 的類型,如果沒有 return 則是 void 類型。比如可以這樣:

運(yùn)行之后是能正確打印出字符串長(zhǎng)度的。

用于傳參

Dart 里的函數(shù)也是一個(gè)對(duì)象,所以可以把函數(shù)作為參數(shù)來(lái)傳遞,比如:

可選參數(shù)

在 Dart 的函數(shù)傳參里,有一個(gè)叫可選參數(shù)的概念,我們以文字控件 Text 為例,在源碼里可以看到 Text 的構(gòu)造函數(shù)是這樣的:

首先,在參數(shù)里有一個(gè) data,它是要顯示的文字內(nèi)容,是一個(gè)必填項(xiàng)。而 data 后面的一堆參數(shù),是用一個(gè)大括號(hào)括起來(lái)的,這些參數(shù)就叫做可選參數(shù),意思是這些參數(shù)可傳可不傳。

假如我們要顯示一個(gè)比較長(zhǎng)的文字,又想限制它最多顯示兩行,就可以這樣來(lái)創(chuàng)建一個(gè) Text:

可選參數(shù),在 Flutter 里面用的非常多。

異步

Future

在 Dart 里使用 Future 來(lái)處理異步任務(wù),比如我們現(xiàn)在延時(shí)一秒打印 666,代碼如下:

Future 的語(yǔ)法和 Promise 非常像。任務(wù)執(zhí)行成功會(huì)調(diào)用 then,執(zhí)行失敗會(huì)調(diào)用 catchError,而無(wú)論成功還是失敗,都會(huì)調(diào)用 whenComplete。

async/await

如果你不喜歡上面那種寫法,或者是想把異步轉(zhuǎn)成同步,就可以用 async 和 await 這兩個(gè)關(guān)鍵字來(lái)轉(zhuǎn)換。

我們把上面的代碼轉(zhuǎn)換一下,寫一個(gè) getString 方法,返回的類型是 Future,它會(huì)延時(shí)返回一個(gè)字符串。在 main 函數(shù)后面加上 async 關(guān)鍵字,在 getString() 前面加上 await,代碼如下:

運(yùn)行之后可以看到,能正常延時(shí)一秒后,把字符串打印出來(lái)。這里 getString() 返回的類型是 Future,而 await getString() 則是返回了延時(shí)之后返回的字符串。await 要在 async 的函數(shù)里面才能使用。

async 和 await 其實(shí)是一個(gè)語(yǔ)法糖,它最終也是轉(zhuǎn)換成 Future 調(diào)用鏈的形式執(zhí)行的。

接下來(lái)回到 Flutter,F(xiàn)lutter 里最重要的一個(gè)概念是 Widget(下面翻譯作控件)。

在原生開發(fā)里面,我們可能會(huì)在界面上區(qū)分,這是一個(gè) View,這是一個(gè) Layout,這是一個(gè) View Controller。但在 Flutter 里面,它們?nèi)紝儆谝粋€(gè)統(tǒng)一的模型 Widget??梢哉f(shuō),在 Flutter 界面里,所有東西都是 Widget。

以前學(xué)面向?qū)ο蟮臅r(shí)候,我們都聽過一句話,叫萬(wàn)物皆對(duì)象。我這里套用一下,在 Flutter 里, 萬(wàn)物皆控件 。

具體有哪些控件,我做了一下簡(jiǎn)單的分類。

根控件

所有的控件都屬于 StatefulWidget 或 StatelessWidget 。它們的區(qū)別是,StatefulWidget 擁有狀態(tài) State ,而 StatelessWidget 沒有。

StatefulWidget

當(dāng)一個(gè)控件是可變的時(shí)候,就要使用 StatefulWidget 來(lái)構(gòu)建。StatefulWidget 本身不可變,但它持有的狀態(tài) State 是可變的。

StatelessWidget

當(dāng)一個(gè)控件狀態(tài)是固定不可變的時(shí)候,就可以使用 StatelessWidget。前面我們寫的 Hello World 就是使用 StatelessWidget。

容器控件

容器類控件一般是將某些屬性或配置,作用在它的子控件上,比如控件所在的寬高、背景、位置等。

常用的容器控件有 Container、Center、Padding 等。

布局控件

布局控件可以類比作原生開發(fā)中的 Layout,通常它會(huì)擁有一個(gè) children 的屬性,用于接收一個(gè)控件數(shù)組,對(duì)這些控件進(jìn)行特定的排版。

常用的布局控件有 Row、Column、Stack、Flex 等。

基礎(chǔ)控件

基礎(chǔ)控件就是常用的文字、按鈕、圖片等控件。

常用的基礎(chǔ)控件有 Text、TextField、Button、Image 等。

功能控件

在 Flutter 里還有一類控件,它們不影響 UI 布局,但帶有一些特定的功能,比如頁(yè)面跳轉(zhuǎn)、事件監(jiān)聽、定義主題等。我們把這一類控件稱作功能控件。

常用的功能控件有 Navigator、NotificationListener、Theme 等。

開始寫 Flutter 代碼了。還記不記得,在 Flutter 項(xiàng)目創(chuàng)建之后,是自帶一個(gè)計(jì)數(shù)器 demo 的,現(xiàn)在我們用自己的代碼實(shí)現(xiàn)一遍。代碼修改成如下:

運(yùn)行之后,就可以看到這樣的界面了:

按鈕每點(diǎn)擊一次,數(shù)字就會(huì)加一。下面我們來(lái)分析一下這段代碼,看下里面用到的一些 Widget。

StatefulWidget

由于頁(yè)面中的數(shù)字是跟隨狀態(tài)變化的,所以該頁(yè)面改用 StatefulWidget。StatefulWidget 并不會(huì)直接返回一個(gè) Widget,而是返回狀態(tài) State,在 State 里再返回 Widget。

Scaffold

Scaffold 是一個(gè)標(biāo)準(zhǔn)的 Material Design 頁(yè)面,它包含了標(biāo)題欄、浮動(dòng)按鈕、側(cè)滑菜單、底部導(dǎo)航欄等配置。我們這里用到了標(biāo)題欄 appBar、頁(yè)面內(nèi)容 body、浮動(dòng)按鈕 floatingActionButton。

AppBar

AppBar 就是標(biāo)題欄,通過查看控件的構(gòu)造方法,我們可以知道它可配置的屬性。

AppBar 的可選參數(shù)除了標(biāo)題 title,還可以配置標(biāo)題前的內(nèi)容 leading,右側(cè)的操作按鈕 anctions,控件垂直高度 elevation 等。我們只傳了 title,其他屬性都用默認(rèn)值。

Center

Center 是一個(gè)容器類控件,它的作用就是讓它的子控件居中顯示。

FloatingActionButton

熟悉安卓開發(fā)的應(yīng)該對(duì)這個(gè)控件比較熟悉,它就是頁(yè)面右下角一個(gè)特定樣式的 Button,參數(shù)里面的 onPressed 是一個(gè)必填項(xiàng),要傳一個(gè)點(diǎn)擊之后的回調(diào)函數(shù)。

根據(jù)這個(gè)例子,下面給大家介紹一下 Flutter 兩個(gè)比較重要的特性。

點(diǎn)擊 Button 之后,我們把 num 變量加一,并使用 setState 通知狀態(tài)發(fā)生了改變,F(xiàn)lutter 會(huì)根據(jù)新的狀態(tài)更新 UI。如果有接觸過小程序開發(fā),setState 就和小程序的 setData 類似。

在 Flutter 里面我們不需要用 set 方法來(lái)更新 UI,可變控件是和狀態(tài)綁定的,這就是 Flutter 的響應(yīng)式 UI 編程。

在 Android Q 和 iOS 13 里都加入了暗黑模式,我們也換一個(gè)暗黑主題來(lái)玩一下。MaterialApp 里有一個(gè) theme 的屬性,我們把它配置一下:

這次改完之后不點(diǎn) Run 了,我們點(diǎn)一下閃電圖標(biāo) Flutter Hot Reload ,就能看到界面發(fā)生了變化:

這就是 Flutter 的 熱重載 ,在修改完代碼之后,通過熱重載就能馬上在設(shè)備上看到修改結(jié)果,可以很大程度上增加開發(fā)效率。

下面再給大家介紹幾個(gè) Flutter 里的常見操作。

在 Flutter 里,使用 Navigator 來(lái)管理頁(yè)面跳轉(zhuǎn),比如要跳轉(zhuǎn)到一個(gè) NewPage 可以這樣寫:

進(jìn)棧使用 push,出棧則是 pop。

使用 MaterialPageRoute 會(huì)模擬出 Android 上頁(yè)面跳轉(zhuǎn)的過場(chǎng)效果。

我們來(lái)看看怎么顯示一張本地圖片。

先在根目錄新建一個(gè)存放圖片的文件夾,比如叫 images,把圖片 picture.png 放進(jìn)去。

找到根目錄下的 pubspec.yaml 文件,這個(gè)便是 Flutter 依賴配置文件,我們需要在這里配置一下剛才的圖片:

這樣,我們就能使用 Image 控件把這張圖片顯示出來(lái)了:

和 node 的 npm 以及 Android 的 jcenter 類似,F(xiàn)lutter 也擁有一個(gè)公共倉(cāng)庫(kù) pub.dev。pub.dev 是 Google 官方的 Dart 倉(cāng)庫(kù),在上面可以找到我們需要的包和插件。

Flutter 本身沒有 Toast,我們來(lái)接入一個(gè)。在 pub.dev 上搜索后,我決定使用 fluttertoast:

按照說(shuō)明,在 pubspec.yaml 文件里的 dependencies 下配置:

點(diǎn)一下 Android Studio 右上角的 Packages get 同步之后就可以使用了:

我們上面使用的都是 Material Design 的控件,它們都是在 flutter/material.dart 包里面的。如果要使用 iOS 風(fēng)格的控件,則要用到 flutter/cupertino.dart 包:

iOS 風(fēng)格的控件,基本都以 Cupertino 開頭。我們把計(jì)時(shí)器頁(yè)面里的控件替換一下:

效果如下:

代碼的部分就到這里了,接下來(lái)跟大家聊一下編譯方式,編程語(yǔ)言的編譯方式有兩種。

關(guān)于它們孰優(yōu)孰劣,就要看從哪個(gè)角度去對(duì)比了。JIT 的話,它的一大特點(diǎn)就是支持動(dòng)態(tài)發(fā)布代碼,也就是支持熱更新。但要是從性能的角度考慮,AOT 會(huì)更好,因?yàn)樵谶\(yùn)行的時(shí)候不用再進(jìn)行編譯的操作的,運(yùn)行的效率會(huì)更高一些。

回到我們一開始的時(shí)候留下的問題,為什么別的跨平臺(tái)方案都是用 JavaScript,而 Flutter 要用 Dart 來(lái)開發(fā)。JavaScript 的編譯方式是 JIT 的,它不支持 AOT。而 Dart 同時(shí)支持 JIT 和 AOT。

Flutter 在開發(fā)階段使用 JIT,讓我們用上了熱重載,增加了開發(fā)效率。在打包時(shí)改用 AOT,保證了正式版應(yīng)用的性能。

最后講一下大家比較關(guān)心的一個(gè)東西,F(xiàn)lutter 是否支持熱更新?前面說(shuō)到 Dart 支持 JIT,所以從技術(shù)層面它是支持的。但是目前是不支持的,在官方的計(jì)劃文檔中,可以看到:

至于原因,官方在這里進(jìn)行了說(shuō)明??偟膩?lái)說(shuō),是由于政策的限制,以及出于對(duì)性能和安全性的考慮,暫時(shí)不支持了。

到這就結(jié)束啦。由于想把 Flutter 基礎(chǔ)在一篇內(nèi)講完,沒有涉及太多細(xì)節(jié),如果要寫 Flutter 代碼還需要深入學(xué)習(xí)。但相信理解之后再學(xué),會(huì)輕松很多。

移動(dòng)APP開發(fā)框架盤點(diǎn)2:Web移動(dòng)前端框架大全

開源項(xiàng)目其實(shí)有一個(gè)成熟周期,這個(gè)周期大概是三年左右,自React框架在2013年發(fā)布并引爆了前端框架的大潮,這個(gè)屬于前端的周期就此開始了。

之后在2015年5月開源的React Native又開啟了屬于Web移動(dòng)前端的周期,15-16年,18-19年,21-22年正好就是屬于移動(dòng)前端的三個(gè)爆發(fā)點(diǎn)。

三年前,在第一個(gè)成熟收獲期,我盤點(diǎn)了移動(dòng)開發(fā)框架。在這第二個(gè)成熟收獲期,理所當(dāng)然要來(lái)盤點(diǎn)一波。

不過,當(dāng)我點(diǎn)開github項(xiàng)目的code-frequency時(shí),還是被這個(gè)準(zhǔn)到嚇人的周期猜想驚呆了,先給你們看一波,剩下的自行驗(yàn)證。

1、

2、

再來(lái)說(shuō)第二個(gè)比較有意思的發(fā)現(xiàn),停止維護(hù)的項(xiàng)目絕大多數(shù)是Vue框架項(xiàng)目。

盤點(diǎn)開始的時(shí)候我還覺得React框架處于絕對(duì)劣勢(shì),到完成時(shí)我發(fā)現(xiàn)React無(wú)論在選擇面還是成熟度上都超過了Vue。

原因我這里就不分析了,反正大家都有自己的看法。

網(wǎng)頁(yè)類框架就是前端組件框架,這一次雖然有大量項(xiàng)目停止維護(hù),但是也有很多項(xiàng)目堅(jiān)持了下來(lái),而且還涌現(xiàn)出了一批新項(xiàng)目。

大廠占了主導(dǎo),因?yàn)檫@些年大廠在移動(dòng)開發(fā)上的需求,遠(yuǎn)高于其它方面。個(gè)人項(xiàng)目要堅(jiān)持確實(shí)不易。

本來(lái)是想要做一個(gè)驗(yàn)證項(xiàng)目,把所有框架都試用一遍并給出推薦度的。由于進(jìn)度太慢,還是下一次再發(fā)吧。

這次的重點(diǎn)是漸進(jìn)類框架,就是所謂多端同構(gòu)框架(小程序框架)。這幾年國(guó)內(nèi)的重點(diǎn)的各種小程序平臺(tái),所以多端框架的需求很是旺盛。

不過大多數(shù)先行者都沒挺過來(lái)還是讓我很意外,只有Taro成功了,想想還是有很多讓人唏噓的東西。

在這里還是先預(yù)測(cè)一波吧,因?yàn)檫@一類框架最變化最大,最終還是有很多框架要出局的。

漸進(jìn)類框架是一個(gè)過渡性的產(chǎn)品,最終會(huì)變成橋接類框架的一部分,所以,與橋接類框架協(xié)同才是框架的出路。

這個(gè)賽道基本全是大廠了。

騰訊新一代跨端開發(fā)框架Hippy

Hippy一看就是淘寶Weex的對(duì)標(biāo)項(xiàng)目,Kpi功能全面壓制。所以官方支持 React 和 Vue 兩種主流前端框架。在Weex2019年實(shí)質(zhì)停更后發(fā)布,要不要這么卷?

Hippy 2.x 架構(gòu)主要分成三層,UI(JS) 層 Hippy-React 和 Hippy-Vue 負(fù)責(zé)驅(qū)動(dòng) UI 指令生成;中間層 C++ HippyCore 負(fù)責(zé)抹平平臺(tái)差異性和提供高性能模塊;渲染層 Android 和 iOS 負(fù)責(zé)提供終端底層模塊、組件,并與布局引擎通信。

對(duì)Weex慘遭遺棄,我上次就說(shuō)過:「ReactNative提供工具,Weex提供框架,將平臺(tái)差異化屏蔽(Write Once, Run Everywhere)。所以Weex則注定功能相對(duì)弱小,并且坑比較多?!筗eex最終下馬也是必然的,淘寶又發(fā)布升級(jí)版北海,為了實(shí)現(xiàn)(Write Once, Run Everywhere),它采用自繪,而且是基于Flutter自繪。

所以Hippy3.x就一如既往的Kpi功能層層加碼,很有騰訊風(fēng)格。在未來(lái)的 3.x 中業(yè)務(wù)與渲染層中的具體實(shí)現(xiàn)可根據(jù)用戶實(shí)際場(chǎng)景進(jìn)行切換:業(yè)務(wù)層上不再局限于 JS 驅(qū)動(dòng),還可選擇(如:DSL/Dart/WASM 等)其它語(yǔ)言進(jìn)行驅(qū)動(dòng);在渲染層中,渲染引擎除了支持現(xiàn)有原生(Native)渲染之外,還可以選擇其他渲染 Renderer,如 Flutter(Voltron) 渲染。

「Kraken 北?!故且豢罡咝阅躓eb渲染引擎。底層基于 Flutter 進(jìn)行渲染。

Kraken 不限制上層開發(fā)者使用的框架,無(wú)論你是使用 Vue 、Rax 還是 React 都可以開發(fā) Kraken 應(yīng)用。

Kraken 的 runtime 通過 JS Engine Binding 的方式提供了一系列 Web 標(biāo)準(zhǔn)的 API 接口,調(diào)用相應(yīng) API 會(huì)執(zhí)行相關(guān)邏輯并創(chuàng)建一系列需要發(fā)送給 Dart 層處理的指令。

Kraken 其實(shí)就是一個(gè)小程序平臺(tái),而且追求全平臺(tái)完全一致。我雖然認(rèn)為各平臺(tái)不一致是很自然的事情,但是也表示理解,畢竟別人吹牛有當(dāng)真的傳統(tǒng)(KFC表示認(rèn)同)。

Kraken 現(xiàn)在也是一個(gè)小號(hào)瀏覽器,所以它的主要工作就是摳標(biāo)準(zhǔn),畢竟它是一款基于 W3C 標(biāo)準(zhǔn)的高性能渲染引擎。

最后,我勸淘寶領(lǐng)導(dǎo)定Kpi要理智些,畢竟Hippy4我還蠻期待的。

滴滴出品的超輕量級(jí)動(dòng)態(tài)化跨端開發(fā)框架,主打輕量和實(shí)用。

Hummer 以 JS 引擎為基石,目前已支持 JavaScriptCore、Hermers、QuickJS 等業(yè)內(nèi)知名 JS 引擎(這里本來(lái)還有個(gè)V8的,我刪除了,源碼里面沒有,Kpi需要)。再配合經(jīng)過調(diào)優(yōu)的 Yoga 布局引擎,抹平了兩端視圖布局差異(性能更佳的自研布局引擎開發(fā)中)。順便提一下,Hippy采用V8(功能更強(qiáng))自研布局引擎(性能更佳)。

Hummer 的特點(diǎn)是拋棄了業(yè)界其他動(dòng)態(tài)化跨端框架普遍使用的DSL層和VDOM層,因此原生 Hummer 不具備前端開發(fā)常用的響應(yīng)式編程的能力,但同時(shí)換來(lái)的是接近原生開發(fā)的體驗(yàn)和性能。再以原生 Hummer 為基礎(chǔ),在此之上開發(fā)了一套基于MVVM架構(gòu)的開發(fā)框架 —— Tenon ,通過 Tenon,可以把使用 Vue/React 編寫的代碼,轉(zhuǎn)換成原生 Hummer 的代碼。

Hummer也是一個(gè)小程序平臺(tái),而且超輕量。如果想要無(wú)限提升自己APP的能力,可以考慮嵌入Hummer。

Web移動(dòng)前端框架正在迎來(lái)第三個(gè)高速發(fā)展期,各類框架得到極大繁榮。

個(gè)人在具體項(xiàng)目的貢獻(xiàn)已經(jīng)微乎其微了,創(chuàng)新、架構(gòu)創(chuàng)新是唯一制勝的手段,這也是我看好React的根本原因。

最后,還是想做點(diǎn)微不足道的 探索 ,現(xiàn)在前端組件庫(kù)層出不窮,更換組件庫(kù)帶來(lái)的代價(jià)有點(diǎn)大。想創(chuàng)建一個(gè)框架,來(lái)實(shí)現(xiàn)上次說(shuō)的組件公約數(shù)和公倍數(shù),無(wú)縫切換組件庫(kù)。理論上支持所有組件庫(kù) ,也能為后來(lái)者提供彎道超車的機(jī)會(huì)。我想大廠可能沒有需求,也不會(huì)愿意發(fā)布這種框架,畢竟都是平臺(tái)部門說(shuō)了算。

這個(gè)庫(kù)就是useMobile,當(dāng)然分為useMobileReact和useMobileVue。下次先發(fā)布useMobileReact。等我發(fā)布后,再來(lái)填上面表中缺的推薦度。

原文地址:


文章題目:flutter前端框架,前端技術(shù)flutter
文章位置:http://weahome.cn/article/hodsgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部