變量聲明:
var:可以接受任何類型的變量,一旦定義,后期不可修改。
所有類型都繼承自object,所以object類型可以承接任意類型的值。
dynamic:是一種特殊的數(shù)據(jù)類型,在編譯時(shí)不進(jìn)行類型檢查,運(yùn)行時(shí)才檢查,類似于js的弱類型語(yǔ)言
dynamic?和?Object:可以接受任何類型的值,并且后期可以隨意修改,不同之處在于dynamic聲明的屬性可以調(diào)用任何屬性或者方法(編譯時(shí)不檢查),而object聲明的對(duì)象只能調(diào)用object上有的屬性和方法
final和const:兩個(gè)都是聲明常量,只能被賦一次值,區(qū)別是final是初始化時(shí)賦值,而const在編譯時(shí)就被賦值不能改變。
常量:const、final
類似于js的弱引用:var、dynamic、object
強(qiáng)引用:int、double、String、List、Map
推薦用法:使用var 定義變量即可,dart會(huì)自動(dòng)進(jìn)行類型推斷
函數(shù):
void fn ({var str1 = 1, var str2 = 2, [var dev = 'sss']}) {}
返回值為空,同時(shí)設(shè)置默認(rèn)值,參數(shù)包含可選參數(shù)
String fn (var str1 , var str2 , [var dev = 'sss']) {}
返回值為Sttring,沒(méi)有默認(rèn)值,參數(shù)包含可選參數(shù)
區(qū)別:如果需要默認(rèn)值,參數(shù)需要用大括號(hào)括起來(lái),也就一個(gè)對(duì)象,推薦使用默認(rèn)值參數(shù)
類:
只能單繼承

介紹: const VideoPage({Key? key, required this.videoUrl}) : super(key: key); 這段代碼是一個(gè)構(gòu)造函數(shù),this.videoUrl 意思是 直接將傳過(guò)來(lái)的 videoUrl 參數(shù)賦值給 videoUrl 變量,super(key: key) 意思是 調(diào)用父類的構(gòu)造函數(shù)。@override 意思是 重寫父類的createState 方法。在該方法中,創(chuàng)建_VideoState實(shí)例,該實(shí)例成為?VideoPage 的屬性
抽象類:類似于協(xié)議,抽象類中定義的方法,在子類中是必須實(shí)現(xiàn)的。
混入:
mixin 類似于vue的mixin,區(qū)別是dart的mixin如果出現(xiàn)同名的方法,不會(huì)依次調(diào)用,而是直接覆蓋。
Future:?
異步執(zhí)行,類似于 promise。據(jù)說(shuō)一模一樣。同樣也有async、await
空安全:
在dart中一切皆對(duì)象,我們?cè)诮o一個(gè)值定義時(shí)必須初始化,如果不初始化,則需要添加late關(guān)鍵字,意思是后期再初始化,在使用前必須初始化,否則會(huì)報(bào)錯(cuò)。
int ? i; // 使用前必須判空,并且在使用的時(shí)候需要加 !目的是高訴編譯器該變量不是空了。例子如下:
if(i != null){ print( i! * 8)}
is、as、is?。号袛囝愋汀⑥D(zhuǎn)類型