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

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

flutter知識(shí)路線的簡(jiǎn)單介紹

Flutter入門(mén)這一篇效率文章就夠了

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

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了饒河免費(fèi)建站歡迎大家使用!

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

WebView 渲染

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

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

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

原生控件渲染

既然 WebView 的性能不夠好,于是就有了使用原生控件進(jìn)行渲染的方案。這種方案,同樣也是使用 JavaScript 開(kāi)發(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)控件更新了,而框架本身還沒(méi)有更新,由此產(chǎn)生了一些問(wèn)題。換句話說(shuō),這種方案是受到原生控件限制的。

繪圖引擎渲染

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

在前端,如果完全不使用原生控件,我們可以通過(guò)系統(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è)開(kāi)發(fā)框架。

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

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

繪圖引擎 Skia

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

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

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

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

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

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

主要的搭建步驟如下:

下載 Flutter SDK

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

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

更新環(huán)境變量

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

安裝開(kāi)發(fā)工具

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

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

安裝插件

在開(kāi)發(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 ,或者通過(guò)菜單欄的 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ì)再講到。

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

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

指定類型

var

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

Object

如果非要上面這樣寫(xiě),那也可以。把 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

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

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

函數(shù)

dynamic

在 Dart 里,函數(shù)也是可以不寫(xiě)返回類型的,不寫(xiě)的話會(huì)被當(dāng)做 dynamic 來(lái)處理。這樣的話,函數(shù)的類型就是 return 的類型,如果沒(méi)有 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

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

我們把上面的代碼轉(zhuǎn)換一下,寫(xiě)一個(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(下面翻譯作控件)。

在原生開(kāi)發(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í)候,我們都聽(tīng)過(guò)一句話,叫萬(wàn)物皆對(duì)象。我這里套用一下,在 Flutter 里, 萬(wàn)物皆控件 。

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

根控件

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

StatefulWidget

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

StatelessWidget

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

容器控件

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

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

布局控件

布局控件可以類比作原生開(kāi)發(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)聽(tīng)、定義主題等。我們把這一類控件稱作功能控件。

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

開(kāi)始寫(xiě) 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)題欄,通過(guò)查看控件的構(gòu)造方法,我們可以知道它可配置的屬性。

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

Center

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

FloatingActionButton

熟悉安卓開(kāi)發(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。如果有接觸過(guò)小程序開(kāi)發(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 的 熱重載 ,在修改完代碼之后,通過(guò)熱重載就能馬上在設(shè)備上看到修改結(jié)果,可以很大程度上增加開(kāi)發(fā)效率。

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

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

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

使用 MaterialPageRoute 會(huì)模擬出 Android 上頁(yè)面跳轉(zhuǎn)的過(guò)場(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 本身沒(méi)有 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 開(kāi)頭。我們把計(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ì)更高一些。

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

Flutter 在開(kāi)發(fā)階段使用 JIT,讓我們用上了熱重載,增加了開(kāi)發(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)講完,沒(méi)有涉及太多細(xì)節(jié),如果要寫(xiě) Flutter 代碼還需要深入學(xué)習(xí)。但相信理解之后再學(xué),會(huì)輕松很多。

自學(xué)前端,前端開(kāi)發(fā)的學(xué)習(xí)路線是什么?

自學(xué)前端其實(shí)很辛苦,需要有強(qiáng)大的自制力和堅(jiān)持下去的學(xué)習(xí)心,并且做好詳細(xì)的學(xué)習(xí)規(guī)劃嚴(yán)格執(zhí)行;如果你想學(xué)前端,下面的學(xué)習(xí)路線或許對(duì)你有幫助。

前端完整學(xué)習(xí)路線

第一階段:

HTML CSS:HTML進(jìn)階、CSS進(jìn)階、div css布局、HTML css整站開(kāi)發(fā)。

JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)象常用方法、常見(jiàn)DOM樹(shù)操作大全、ECMAscript、DOM、BOM、定時(shí)器和焦點(diǎn)圖。

JS基本特效:常見(jiàn)特效、例如:tab、導(dǎo)航、整頁(yè)滾動(dòng)、輪播圖、JS制作幻燈片、彈出層、手風(fēng)琴菜單、瀑布流布局、滾動(dòng)事件、滾差視圖。

JS高級(jí)特征:正則表達(dá)式、排序算法、遞歸算法、閉包、函數(shù)節(jié)流、作用域鏈、基于距離運(yùn)動(dòng)框架、面向?qū)ο蠡A(chǔ)。

JQuery:基礎(chǔ)使用懸著器、DOM操作、特效和動(dòng)畫(huà)、方法鏈、拖拽、變形、JQueryUI組件基本使用。

第二階段:HTML5和移動(dòng)Web開(kāi)發(fā)

HTML5:HTML5新語(yǔ)義標(biāo)簽、HTML5表單、音頻和視頻、離線和本地存儲(chǔ)、SVG、Web Socket、Canvas。

CSS3:CSS3新選擇器、偽元素、臉色表示法、邊框、陰影、background系列屬性改變、Transition、動(dòng)畫(huà)、景深和深透、3D效果制作、Velocity.js框架、元素進(jìn)場(chǎng)、出場(chǎng)策略、炫酷CSS3網(wǎng)頁(yè)制作。

Bootstrap:響應(yīng)式概念、媒體查詢、響應(yīng)式網(wǎng)站制作、刪格系統(tǒng)、刪格系統(tǒng)原理、Bootstrap常用模板、LESS和SASS。

移動(dòng)Web開(kāi)發(fā):跨終端WEB和主流設(shè)備簡(jiǎn)介、視口、流式布局、彈性盒子、rem、移動(dòng)終端JavaScript事件、手機(jī)中常見(jiàn)JS效果制作、Zepto.js、手機(jī)聚劃算頁(yè)面、手機(jī)滾屏。

第三階段:HTTP服務(wù)和AJAX編程

WEB服務(wù)器基礎(chǔ):服務(wù)器基礎(chǔ)知識(shí)、Apache服務(wù)器和其他WEB服務(wù)器介紹、Apache服務(wù)器搭建、HTTP介紹。

PHP基礎(chǔ):PHP基礎(chǔ)語(yǔ)法、使用PHP處理簡(jiǎn)單的GET或者POST請(qǐng)求。

AJAX上篇:Ajax簡(jiǎn)介和異步的概念、Ajax框架的封裝、XMLHttpRequest對(duì)象詳細(xì)介紹方法、兼容性處理方法、Ajax框架的封裝、Ajax中緩存問(wèn)題、XML介紹和使用。

AJAX下篇:JSON和JSON解析、數(shù)據(jù)綁定和模板技術(shù)、JSONP、跨域技術(shù)、圖片預(yù)讀取和lazy-load技術(shù)、JQuery框架中的AjaxAPI、使用Ajax實(shí)現(xiàn)爆布流案例額。

第四階段:面向?qū)ο筮M(jìn)階

面向?qū)ο蠼K極篇:從內(nèi)存角度到理解JS面向?qū)ο?、基本類型、?fù)雜類型、原型鏈、ES6中的面向?qū)ο蟆傩宰x寫(xiě)權(quán)限、設(shè)置器、訪問(wèn)器。

面向?qū)ο笕筇卣?繼承性、多態(tài)性、封裝性、接口。

設(shè)計(jì)模式:面向?qū)ο缶幊趟季S、單例模式、工廠模式、策略模式、觀察者模式、模板方法模式、代理模式、裝飾者模式、適配器模式、面向切面編程。

第五階段:封裝一個(gè)屬于自己的框架

框架封裝基礎(chǔ):事件流、冒泡、捕獲、事件對(duì)象、事件框架、選擇框架。

框架封裝中級(jí):運(yùn)動(dòng)原理、單物體運(yùn)動(dòng)框架、多物體運(yùn)動(dòng)框架、運(yùn)動(dòng)框架面向?qū)ο蠓庋b。

框架封裝高級(jí)和補(bǔ)充:JQuery框架雛形、可擴(kuò)展性、模塊化、封裝屬于傳智自己的框架。

第六階段:模塊化組件開(kāi)發(fā)

面向組件編程:面向組件編程的方式、面向組件編程的實(shí)現(xiàn)原理、面向組件編程實(shí)戰(zhàn)、基于組件化思想開(kāi)發(fā)網(wǎng)站應(yīng)用程序。

面向模塊編程:AMD設(shè)計(jì)規(guī)范、CMD設(shè)計(jì)規(guī)范、RequireJS,LoadJS、淘寶的SeaJS。

第七階段:主流的流行框架

Web開(kāi)發(fā)工作流:GIT/SVN、Yeoman腳手架、NPMer依賴管理工具、Grunt/Gulp/Webpack。

MVC/MVVM/MVW框架:Angular.js、Backbone.js、Knockout/Ember。

常用庫(kù):React.js、Vue.js、Zepto.js。

第八階段:HTML5原生移動(dòng)應(yīng)用開(kāi)發(fā)

Cordova:WebApp/NativeApp/HybirdApp簡(jiǎn)介、Cordova簡(jiǎn)介、與PhoneGap之間的關(guān)系、開(kāi)發(fā)環(huán)境搭建、Cordova實(shí)戰(zhàn)(創(chuàng)建項(xiàng)目,配置,編譯,調(diào)試,部署發(fā)布)。

Ionic:Ionic簡(jiǎn)介和同類對(duì)比、模板項(xiàng)目解析、常見(jiàn)組件及使用、結(jié)合Angular構(gòu)建APP、常見(jiàn)效果(下拉刷新,上拉加載,側(cè)滑導(dǎo)航,選項(xiàng)卡)。

React Native:React Native簡(jiǎn)介、React Native環(huán)境配置、創(chuàng)建項(xiàng)目,配置,編譯,調(diào)試,部署發(fā)布、原生模塊和UI組件、原生常用API。

HTML5 :HTML5 中國(guó)產(chǎn)業(yè)聯(lián)盟、HTML5 Plus Runtime環(huán)境、HBuilder開(kāi)發(fā)工具、MUI框架、H5 開(kāi)發(fā)和部署。

第九階段: Node.js全棧開(kāi)發(fā):

快速入門(mén):Node.js發(fā)展、生態(tài)圈、Io.js、Linux/Windows/OS X環(huán)境配置、REPL環(huán)境和控制臺(tái)程序、異步編程,非阻塞I/O、模塊概念,模塊管理工具、開(kāi)發(fā)流程,調(diào)試,測(cè)試。

核心模塊和對(duì)象:全局對(duì)象global,process,console,util、事件驅(qū)動(dòng),事件發(fā)射器、加密解密,路徑操做。

祝你學(xué)有所成!

Flutter進(jìn)階篇(4)-- Flutter的Future異步詳解

本文首發(fā)在公眾號(hào) Flutter那些事 ,歡迎大家多多關(guān)注。

工具安裝:

Flutter基礎(chǔ)篇:

Flutter進(jìn)階篇:

Dart語(yǔ)法基礎(chǔ)篇:

Dart語(yǔ)法進(jìn)階篇:

說(shuō)明:本文中的所有函數(shù)的引用在 main 函數(shù)中:

這里的執(zhí)行結(jié)果是:

Futue直接new就可以了。我這里沒(méi)有具體的返回?cái)?shù)據(jù),所以就用匿名函數(shù)代替了, Future future = new Future(() = null); 相當(dāng)于 FutureNull future = new Future(() = null); 泛型如果為null可以省略不寫(xiě),為了便于維護(hù)和管理,開(kāi)發(fā)中建議加上泛型。

輸出結(jié)果是:

future里面有幾個(gè)函數(shù):

then :異步操作邏輯在這里寫(xiě)。

whenComplete :異步完成時(shí)的回調(diào)。

catchError :捕獲異?;蛘弋惒匠鲥e(cuò)時(shí)的回調(diào)。

因?yàn)檫@里面的異步操作過(guò)程中沒(méi)有遇到什么錯(cuò)誤,所以catchError回調(diào)不會(huì)調(diào)用。

我們可以看到執(zhí)行結(jié)果是:

我們可以看到輸出結(jié)果是: 2 1 3 和我們創(chuàng)建Future對(duì)象的先后順序完全一致。

我們可以看到結(jié)果為 1 2 3 ,和我們調(diào)用then的先后順序無(wú)關(guān)。:

當(dāng)then回調(diào)函數(shù)里面還有then回調(diào)的時(shí)候,這時(shí)候的流程跟前面就不太一樣了,也是一個(gè)大坑,也是面試經(jīng)常會(huì)被問(wèn)到的一個(gè)知識(shí)點(diǎn)。

我們可以看到執(zhí)行結(jié)果如下:

結(jié)果還是一樣的:

運(yùn)行結(jié)果是:

這里再次證明了上面我的猜想: 執(zhí)行順序和和創(chuàng)建Future的先后順序有關(guān),如果有多個(gè)then嵌套執(zhí)行,先執(zhí)行外面的then,然后執(zhí)行里面的then。

執(zhí)行結(jié)果如下,我們可以看到then內(nèi)部創(chuàng)建的Future要等到then執(zhí)行完了,最后再去執(zhí)行的:

根據(jù)上文總結(jié)的特點(diǎn),我們可以不用運(yùn)行也能推斷出輸出結(jié)果:

為了驗(yàn)證我們的猜想,我們打印一下輸出結(jié)果,果然我們的證明是正確的。

我們重點(diǎn)看看 then函數(shù)的文檔說(shuō)明:

then 注冊(cè)在 Future 完成時(shí)調(diào)用的回調(diào)。

當(dāng)這個(gè) Future 用一個(gè) value 完成時(shí),將使用該值調(diào)用 onValue 回調(diào)。

如果 Future 已經(jīng)完成,則不會(huì)立即調(diào)用回調(diào),而是將在稍后的 microtask(微任務(wù)) 中調(diào)度。

如果回調(diào)返回 Future ,那么 then 返回的 future 將與 callback 返回的 future 結(jié)果相同。

onError 回調(diào)必須接受一個(gè)參數(shù)或兩個(gè)參數(shù),后者是[StackTrace]。

如果 onError 接受兩個(gè)參數(shù),則使用錯(cuò)誤和堆棧跟蹤時(shí)調(diào)用它,否則僅使用錯(cuò)誤對(duì)象時(shí)候調(diào)用它。

onError 回調(diào)必須返回一個(gè)可用于完成返回的future的值或future,因此它必須是可賦值給 FutureOr R 的東西。

返回一個(gè)新的 Future ,該 Future 是通過(guò)調(diào)用 onValue (如果這個(gè)Future是通過(guò)一個(gè)value完成的)或' onError (如果這個(gè)Future是通過(guò)一個(gè)error完成的)的結(jié)果完成的。

如果調(diào)用的回調(diào)拋出異常,返回的 future 將使用拋出的錯(cuò)誤和錯(cuò)誤的堆棧跟蹤完成。在 onError 的情況下,如果拋出的異常與 onError 的錯(cuò)誤參數(shù)“相同(identical)”,則視為重新拋出,并使用原始堆棧跟蹤替代

如果回調(diào)返回 Future ,則 then 返回的 Future 將以與回調(diào)返回的 Future 相同的結(jié)果完成。

如果未給出 onError ,并且后續(xù)程序走了剛出現(xiàn)了錯(cuò)誤,則錯(cuò)誤將直接轉(zhuǎn)發(fā)給返回的 Future 。

在大多數(shù)情況下,單獨(dú)使用 catchError 更可讀,可能使用 test 參數(shù),而不是在單個(gè) then 調(diào)用中同時(shí)處理 value 和 error 。

請(qǐng)注意,在添加監(jiān)聽(tīng)器(listener)之前, future 不會(huì)延遲報(bào)告錯(cuò)誤。如果第一個(gè) then 或 catchError 調(diào)用在 future 完成后發(fā)生 error ,那么 error 將報(bào)告為未處理的錯(cuò)誤。

Flutter-淺談CurvedAnimation類

在接觸 Flutter 的 AnimationController 類之后,我們還會(huì)接觸到 CurvedAnimation 類。這個(gè)動(dòng)畫(huà)相關(guān)的類主要做什么的呢?這篇博客就來(lái)分享 CurvedAnimation 類相關(guān)的知識(shí),希望對(duì)看文章的小伙伴有所啟發(fā)。

CurvedAnimation 類,曲線動(dòng)畫(huà)對(duì)象。繼承 Animationdouble ,生成 double 值。

屬性說(shuō)明:

Flutter之Image Widget(六)

Image(圖片組件)是顯示圖像的組件,一個(gè)顯示圖片的widget,支持圖像格式:JPEG,PNG,GIF,動(dòng)畫(huà)GIF,WebP,動(dòng)畫(huà)WebP,BMP和WBM

構(gòu)造方法

Image: 從ImageProvider獲取數(shù)據(jù)

Image.network: 加載網(wǎng)絡(luò)圖片。

Image.asset: 加載本地圖片文件。

new Image.file: 加載本地圖片文件(File文件)圖片。

new Image.memory: 加載Uint8List資源圖片(byte數(shù)組)圖片。

常用屬性

方式一:CircleAvatar

CircleAvatar可以實(shí)現(xiàn)圓形頭像,也可以添加一個(gè)子Widget:

在圖片上加一個(gè)文本

方式二:ClipOval

ClipOval也可以實(shí)現(xiàn)圓角頭像,而且通常是在只有頭像時(shí)使用

方式三:Container+BoxDecoration

方法一:ClipRRect

方法二:Container + BoxDecoration

補(bǔ)充知識(shí)點(diǎn)

Icon字體圖標(biāo)和圖片圖標(biāo)的區(qū)別 ?

Colors.red 是一個(gè)MaterialColor對(duì)象,為什么可以使用[](Colors.red[10])來(lái)設(shè)置顏色 ?

MaterialColor 繼承于ColorSwatch,ColorSwatch中有[] 運(yùn)算符重載;

前端開(kāi)發(fā)自學(xué)路線是什么?

這里整理了一份web前端學(xué)習(xí)路線的思維導(dǎo)圖,需要掌握和學(xué)習(xí)的內(nèi)容如下:

第一階段:專業(yè)核心基礎(chǔ)

階段目標(biāo):

1. 熟練掌握HTML5、CSS3、Less、Sass、響應(yīng)書(shū)布局、移動(dòng)端開(kāi)發(fā)。

2. 熟練運(yùn)用HTML+CSS特性完成頁(yè)面布局。

4. 熟練應(yīng)用CSS3技術(shù),動(dòng)畫(huà)、彈性盒模型設(shè)計(jì)。

5. 熟練完成移動(dòng)端頁(yè)面的設(shè)計(jì)。

6. 熟練運(yùn)用所學(xué)知識(shí)仿制任意Web網(wǎng)站。

7. 能綜合運(yùn)用所學(xué)知識(shí)完成網(wǎng)頁(yè)設(shè)計(jì)實(shí)戰(zhàn)。

知識(shí)點(diǎn):

1、Web前端開(kāi)發(fā)環(huán)境,HTML常用標(biāo)簽,表單元素,Table布局,CSS樣式表,DIV+CSS布局。熟練運(yùn)用HTML和CSS樣式屬性完成頁(yè)面的布局和美化,能夠仿制任意網(wǎng)站的前端頁(yè)面實(shí)現(xiàn)。

2、CSS3選擇器、偽類、過(guò)渡、變換、動(dòng)畫(huà)、字體圖標(biāo)、彈性盒模型、響應(yīng)式布局、移動(dòng)端。熟練運(yùn)用CSS3來(lái)開(kāi)發(fā)網(wǎng)頁(yè)、熟練開(kāi)發(fā)移動(dòng)端,整理網(wǎng)頁(yè)開(kāi)發(fā)技巧。

3、預(yù)編譯css技術(shù):less、sass基礎(chǔ)知識(shí)、以及插件的運(yùn)用、BootStrap源碼分析。能夠熟練使用 less、sass完成項(xiàng)目開(kāi)發(fā),深入了解BootStrap。

4、使用HTML、CSS、LESS、SASS等技術(shù)完成網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)。通過(guò)項(xiàng)目掌握第一階段html、css的內(nèi)容、完成PC端頁(yè)面設(shè)計(jì)和移動(dòng)端頁(yè)面設(shè)計(jì)。

第二階段:Web后臺(tái)技術(shù)

階段目標(biāo):

1. 了解JavaScript的發(fā)展歷史、掌握Node環(huán)境搭建及npm使用。

2. 熟練掌握J(rèn)avaScript的基本數(shù)據(jù)類型和變量的概念。

3. 熟練掌握J(rèn)avaScript中的運(yùn)算符使用。

4. 深入理解分支結(jié)構(gòu)語(yǔ)句和循環(huán)語(yǔ)句。

5. 熟練使用數(shù)組來(lái)完成各種練習(xí)。

6.熟悉es6的語(yǔ)法、熟練掌握J(rèn)avaScript面向?qū)ο缶幊獭?/p>

7.DOM和BOM實(shí)戰(zhàn)練習(xí)和H5新特性和協(xié)議的學(xué)習(xí)。

知識(shí)點(diǎn):

1、軟件開(kāi)發(fā)流程、算法、變量、數(shù)據(jù)類型、分之語(yǔ)句、循環(huán)語(yǔ)句、數(shù)組和函數(shù)。熟練運(yùn)用JavaScript的知識(shí)完成各種練習(xí)。

2、JavaScript面向?qū)ο蠡A(chǔ)、異常處理機(jī)制、常見(jiàn)對(duì)象api,js的兼容性、ES6新特性。熟練掌握J(rèn)avaScript面向?qū)ο蟮拈_(kāi)發(fā)以及掌握es6中的重要內(nèi)容。

3、BOM操作和DOM操作。熟練使用BOM的各種對(duì)象、熟練操作DOM的對(duì)象。

4、h5相關(guān)api、canvas、ajax、數(shù)據(jù)模擬、touch事件、mockjs。熟練使用所學(xué)知識(shí)來(lái)完成網(wǎng)站項(xiàng)目開(kāi)發(fā)。

第三階段:數(shù)據(jù)庫(kù)和框架實(shí)戰(zhàn)

階段目標(biāo):

1. 綜合運(yùn)用Web前端技術(shù)進(jìn)行頁(yè)面布局與美化。

2. 綜合運(yùn)用Web前端開(kāi)發(fā)框架進(jìn)行Web系統(tǒng)開(kāi)發(fā)。

3. 熟練掌握Mysql、Mongodb數(shù)據(jù)庫(kù)的發(fā)開(kāi)。

4. 熟練掌握vue.js、webpack、elementui等前端框技術(shù)。

5. 熟練運(yùn)用Node.js開(kāi)發(fā)后臺(tái)應(yīng)用程序。

6. 對(duì)Restful,Ajax,JSON,開(kāi)發(fā)過(guò)程有深入的理解,掌握git的基本技能。

知識(shí)點(diǎn):

1、數(shù)據(jù)庫(kù)知識(shí),范式,MySQL配置,命令,建庫(kù)建表,數(shù)據(jù)的增刪改查,mongodb數(shù)據(jù)庫(kù)。深入理解數(shù)據(jù)庫(kù)管理系統(tǒng)通用知識(shí)及MySQL數(shù)據(jù)庫(kù)的使用與管理,為Node.js后臺(tái)開(kāi)發(fā)打下堅(jiān)實(shí)基礎(chǔ)。

2、模塊系統(tǒng),函數(shù),路由,全局對(duì)象,文件系統(tǒng),請(qǐng)求處理,Web模塊,Express框架,MySQL數(shù)據(jù)庫(kù)處理,RestfulAPI,文件上傳等。熟練運(yùn)用Node.js運(yùn)行環(huán)境和后臺(tái)開(kāi)發(fā)框架完成Web系統(tǒng)的后臺(tái)開(kāi)發(fā)。

3、vue的組件、生命周期、路由、組件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能夠運(yùn)用Vue.js完成基礎(chǔ)前端開(kāi)發(fā)、熟練運(yùn)用Vue.js框架的高級(jí)功能完成Web前端開(kāi)發(fā)和組件開(kāi)發(fā),對(duì)MVVM模式有深刻理解。

4、需求分析,數(shù)據(jù)庫(kù)設(shè)計(jì),后臺(tái)開(kāi)發(fā),使用vue、node完成pc和移動(dòng)端整站開(kāi)發(fā)。于Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,實(shí)現(xiàn)整站項(xiàng)目完整功能并上線發(fā)布。

第四階段:移動(dòng)端和微信實(shí)戰(zhàn)

階段目標(biāo):

1.熟練掌握React.js框架,熟練使用React.js完成開(kāi)發(fā)。

2.掌握移動(dòng)端開(kāi)發(fā)原理,理解原生開(kāi)發(fā)和混合開(kāi)發(fā)。

3.熟練使用react-native和Flutter框架完成移動(dòng)端開(kāi)發(fā)。

4.掌握微信小程序以及了解支付寶小程序的開(kāi)發(fā)。

5.完成大型電商項(xiàng)目開(kāi)發(fā)。

知識(shí)點(diǎn):

1、React面向組件編程、表單數(shù)據(jù)、組件通信、監(jiān)聽(tīng)、生命周期、路由、Redux基本概念。練使用react完成項(xiàng)目開(kāi)發(fā)、掌握Redux中的異步解決方案Saga。

2、react-native、開(kāi)發(fā)工具、視圖與渲染、api操作、Flutter環(huán)境搭建、路由、ListView組件、網(wǎng)絡(luò)請(qǐng)求、打包。練掌握react-native和Flutter框架,并分別使用react-native和Flutter分別能開(kāi)發(fā)移動(dòng)端項(xiàng)目。

3、微信小程序基本介紹、開(kāi)發(fā)工具、視圖與渲染、api操作、支付寶小程序的入門(mén)和api學(xué)習(xí)。掌握微信小程序開(kāi)發(fā)了解支付寶小程序。

4、大型購(gòu)物網(wǎng)站實(shí)戰(zhàn),整個(gè)項(xiàng)目前后端分離開(kāi)發(fā);整個(gè)項(xiàng)目分為四部分:PC端網(wǎng)頁(yè)、移動(dòng)端APP、小程序、后臺(tái)管理。團(tuán)隊(duì)協(xié)作開(kāi)發(fā),使用git進(jìn)行版本控制。目期間可以擴(kuò)展Three.js 、TypeScript。

對(duì)于如何學(xué)習(xí)WEB前端,或者在學(xué)習(xí)WEB前端過(guò)程中遇見(jiàn)問(wèn)題自己無(wú)法解決,可以到這個(gè)WEB前端裙,里面有最新的學(xué)習(xí)路線和教程,可以跟著學(xué),有什么不懂的地方可以隨時(shí)在里面問(wèn),后面就是這個(gè)WEB前端裙:731255295。


新聞標(biāo)題:flutter知識(shí)路線的簡(jiǎn)單介紹
路徑分享:http://weahome.cn/article/hoiihg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部