表格布局和線性布局比較相似,只是使用起來更簡潔一些。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元三亞做網(wǎng)站,已為上家服務(wù),為三亞各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學(xué)Flutter ,文章會根據(jù)學(xué)習(xí)進(jìn)度不定時更新,請多多指教~~
Dart作為高級語言,支持面向?qū)ο蟮暮芏嗵匦裕⑶抑С只趍ixin的繼承方式,基于mixin的繼承方式是指:一個類可以繼承自多個父類,相當(dāng)于其他語言里的多繼承。所有的類都有同一個基類Object,這和特性類似于Java語言,Java所有的類也都是繼承自O(shè)bject,也就是說一切皆對象。
Dart 是一門面向?qū)ο蟮恼Z言, 全部的類都是繼承自 Object , 除了支持傳統(tǒng)的 繼承、封裝、多態(tài) , 還有基于組合(Mixin-based)的繼承特性
類型推導(dǎo)(var/final/const)
var
final和const的區(qū)別
3.非零即真( )
4.字符串
5.集合
Dart中變量初始值為null,即使是int類型也可以是null(java中int默認(rèn)是0, boolean默認(rèn)是false); Dart支持自識別,可以是用var定義變量,也可以直接指定具體類型; final或者const都可修飾不可變的變量,final變量只能賦值一次,const是編譯時常量。
int和double是num子類,沒有float類型; 支持字符串模板,用${expression}的方式來實(shí)現(xiàn)字符串效果,類似如字符串拼接; String可以使用單引號或者雙引號; Dart沒有數(shù)組,只有列表; 其中List,Set,Map不是抽象接口,是具體實(shí)現(xiàn)類,可直接使用; Map的key沒有指定類型,key類型不一致不會報錯;key不能相同,但是value可以相同,value可以為null。 var name = 'Tom';
方法也是對象,方法可賦值給一個變量; 如果方法的參數(shù)是解構(gòu)出來的可以通過 @required 注解標(biāo)注為必填 const Scrollbar({Key key, @required Widget child}); 支持可選參數(shù),可選命名參數(shù)用{}包圍,可選位置參數(shù)寫在最后并且使用[]包圍 String say(String from, String msg, [String device]); 支持默認(rèn)參數(shù) void enableFlags({bool bold = false, bool hidden = false}) {…}; 以_開頭的方法都是私有的。 void main() {
支持閉包,閉包能夠訪問外部方法內(nèi)部的局部變量
1.空替換?? expr1 ?? expr2,如果expr1是non-null,返回其值。否則執(zhí)行expr2并返回其結(jié)果; 2.條件成員訪問?.P?.y = 4; 如果p是non-null,則設(shè)置y的值等于4; 3.類型判定操作符(as,is,is!); 4.級聯(lián)操作,可以在同一個對象上連續(xù)調(diào)用多個函數(shù)以及訪問成員變量;
和java不同的是,Dart可以拋出任意類型的對象; 程序不會強(qiáng)制要求開發(fā)中處理異常,但若發(fā)生異常,程序會中斷; 其中異常主要分為Error和Exception兩種類型。
創(chuàng)建對象可以不使用new關(guān)鍵字; Dart中沒有public,private,protected這些關(guān)鍵字; 沒有interfaces關(guān)鍵字,每一個類都是一個接口。我們可以用抽象類來類比java中的接口; Dart把多重繼承的類叫做Mixins。
支持語法糖 Point(this.x, this.y); 每個實(shí)例變量都會自動生成一個getter方法,Non-final變量還會自動生成一個setter; 命名構(gòu)造函數(shù),使用命名構(gòu)造函數(shù)可以為一個類實(shí)現(xiàn)多個構(gòu)造函數(shù),也能更加清晰的表明你的意圖;
斷言是如果條件表達(dá)式不滿足則停止代碼執(zhí)行; 斷言只在檢查模式下運(yùn)行有效,如果在生產(chǎn)模式下運(yùn)行則不會執(zhí)行。
Dart 以兩種模式運(yùn)行: Dart 1.x 有生產(chǎn)模式和檢查模式兩種模式, Dart 2.x 中移除了檢查模式。
注:建議在開發(fā)/測試模式中使用 檢查模式 運(yùn)行 Dart VM ,因?yàn)樗鼤砑泳婧湾e誤以幫助開發(fā)和調(diào)試過程;選中的模式會強(qiáng)制執(zhí)行各種檢查,例如類型檢查等。
dart標(biāo)識符可以包括字符和數(shù)字,但不能以 數(shù)字開頭 。
Dart 是一種面向?qū)ο蟮木幊陶Z言。
代碼說明:定義了一個類 TestClass ,這個類擁有一個方法 disp() ,方法可以實(shí)現(xiàn)在終端打印字符串 Hello Dart! ,使用 new 關(guān)鍵字創(chuàng)建類的對象,該對象調(diào)用方法 disp() 。
關(guān)于dart的學(xué)習(xí)還有很多;我列出如下: Flutter高級工程師進(jìn)階學(xué)習(xí)資料;需要可以私信我。發(fā)送“核心筆記”或“手冊”,即可領(lǐng)取資料!
本文首發(fā)在公眾號 Flutter那些事 ,歡迎大家多多關(guān)注。
工具安裝:
Flutter基礎(chǔ)篇:
Flutter進(jìn)階篇:
Dart語法基礎(chǔ)篇:
Dart語法進(jìn)階篇:
說明:本文中的所有函數(shù)的引用在 main 函數(shù)中:
這里的執(zhí)行結(jié)果是:
Futue直接new就可以了。我這里沒有具體的返回數(shù)據(jù),所以就用匿名函數(shù)代替了, Future future = new Future(() = null); 相當(dāng)于 FutureNull future = new Future(() = null); 泛型如果為null可以省略不寫,為了便于維護(hù)和管理,開發(fā)中建議加上泛型。
輸出結(jié)果是:
future里面有幾個函數(shù):
then :異步操作邏輯在這里寫。
whenComplete :異步完成時的回調(diào)。
catchError :捕獲異常或者異步出錯時的回調(diào)。
因?yàn)檫@里面的異步操作過程中沒有遇到什么錯誤,所以catchError回調(diào)不會調(diào)用。
我們可以看到執(zhí)行結(jié)果是:
我們可以看到輸出結(jié)果是: 2 1 3 和我們創(chuàng)建Future對象的先后順序完全一致。
我們可以看到結(jié)果為 1 2 3 ,和我們調(diào)用then的先后順序無關(guān)。:
當(dāng)then回調(diào)函數(shù)里面還有then回調(diào)的時候,這時候的流程跟前面就不太一樣了,也是一個大坑,也是面試經(jīng)常會被問到的一個知識點(diǎn)。
我們可以看到執(zhí)行結(jié)果如下:
結(jié)果還是一樣的:
運(yùn)行結(jié)果是:
這里再次證明了上面我的猜想: 執(zhí)行順序和和創(chuàng)建Future的先后順序有關(guān),如果有多個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ù)的文檔說明:
then 注冊在 Future 完成時調(diào)用的回調(diào)。
當(dāng)這個 Future 用一個 value 完成時,將使用該值調(diào)用 onValue 回調(diào)。
如果 Future 已經(jīng)完成,則不會立即調(diào)用回調(diào),而是將在稍后的 microtask(微任務(wù)) 中調(diào)度。
如果回調(diào)返回 Future ,那么 then 返回的 future 將與 callback 返回的 future 結(jié)果相同。
onError 回調(diào)必須接受一個參數(shù)或兩個參數(shù),后者是[StackTrace]。
如果 onError 接受兩個參數(shù),則使用錯誤和堆棧跟蹤時調(diào)用它,否則僅使用錯誤對象時候調(diào)用它。
onError 回調(diào)必須返回一個可用于完成返回的future的值或future,因此它必須是可賦值給 FutureOr R 的東西。
返回一個新的 Future ,該 Future 是通過調(diào)用 onValue (如果這個Future是通過一個value完成的)或' onError (如果這個Future是通過一個error完成的)的結(jié)果完成的。
如果調(diào)用的回調(diào)拋出異常,返回的 future 將使用拋出的錯誤和錯誤的堆棧跟蹤完成。在 onError 的情況下,如果拋出的異常與 onError 的錯誤參數(shù)“相同(identical)”,則視為重新拋出,并使用原始堆棧跟蹤替代
如果回調(diào)返回 Future ,則 then 返回的 Future 將以與回調(diào)返回的 Future 相同的結(jié)果完成。
如果未給出 onError ,并且后續(xù)程序走了剛出現(xiàn)了錯誤,則錯誤將直接轉(zhuǎn)發(fā)給返回的 Future 。
在大多數(shù)情況下,單獨(dú)使用 catchError 更可讀,可能使用 test 參數(shù),而不是在單個 then 調(diào)用中同時處理 value 和 error 。
請注意,在添加監(jiān)聽器(listener)之前, future 不會延遲報告錯誤。如果第一個 then 或 catchError 調(diào)用在 future 完成后發(fā)生 error ,那么 error 將報告為未處理的錯誤。
分享文章:flutter高級進(jìn)階,flutter從入門到精通
鏈接地址:http://chinadenli.net/article48/dsgdchp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、Google、面包屑導(dǎo)航、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)