-
靜態成員
使用static關鍵字來實現類級別的變量和函數
靜態成員不能訪問非靜態成員,非靜態成員可以訪問靜態成員
類中的常量需要使用static const聲明
訪問靜態成員
Page.scrollDown();
查看全部 -
初始化列表
跟語法糖一樣是在構造方法之前運行
使用逗號分隔初始化表達式
初始化列表用于設置final變量的值
class?Person?{ ??String?name; ??int?age; ??final?String?gender; ??Person(this.name,?this.age,?this.gender); ??Person.withMap?(Map?map)?:?gender?=?map["gender"]{ ????this.name?=?map["name"]; ????this.age?=?map["age"]; ??} }
?Person.withMap?(Map?map)?:this.name?=?map["name"], ????????this.age?=?map["age"],gender?=?map["gender"]{ ??} }
查看全部 -
工廠構造方法
1、工廠構造方法類似于設計模式中工廠模式
2、在構造方法前添加關鍵字factory實現一個工廠構造方法
3、在工廠構造方法中可返回對象
class?Logger?{ ??final?String?name; ??static?final?Map<String,?Logger>?_cache?=?<String,?Logger>{}; ??factory?Logger(String?name)?{ ????if?(_cache.containsKey(name))?{ ??????return?_cache[name]; ????}?else?{ ??????final?logger?=?Logger._internal(name); ??????_cache[name]?=?logger; ??????return?logger; ????} ??} ??Logger._internal(this.name); ??void?log(String?msg)?{ ????print(msg); ??} }
查看全部 -
用const聲明對象,需要有常量構造方法
1、如果類是不可變狀態,可以把對象定義為編譯時常量
2、使用const聲明構造方法,并且所有變量都為final
3、使用const聲明對象,可以省略
class?Person?{ ??final?String?name; ??final?int?age; ??final?String?gender; ??const?Person?(this.name,?this.age,?this.gender); ??void?work()?{ ????print("Name?is?$name,?Age?is?$age,?He?is?workding"); ??} }
const?person?=??const?Person("Tom",?20,?"M");
查看全部 -
Dart構造方法
如果沒有自定義構造方法,則會有個默認構造方法
如果存在自定義構造方法,則默認構造方法無效
構造方法不能重載
Dart語法糖
final?String?gender; Person?(this.name,?this.age,?this.gender);
這種寫法是先給屬性賦值再執行構造方法,所以可以給final屬性賦值是沒問題的
想要在Dart使用多個構造方法,則需要命名構造方法
1、使用類名.方法的形式實現
Person.withAge(this.age,?this.gender); Person.sad(this.gender);
查看全部 -
計算屬性:
計算屬性的值是通過計算而來,本身不存儲值
計算屬性賦值,其實是通過計算轉換到其它實例變量
void?main(List?args)?{ ??var?rectangle?=?Rectangle(); ??rectangle.height?=?20; ??rectangle.width?=?10; ??print(rectangle.area); ??rectangle.area?=?200; ??print(rectangle.width); } class?Rectangle?{ ??num?width,?height; ??num?get?area?=>?width*height; ??????set?area(value)?{ ????????width?=?value/20; ??????} }
查看全部 -
對象
聲明new關鍵字可以省略
類中屬性默認生成getter和setter方法
使用final聲明的屬性只有getter方法
屬性和方法通過 . 訪問?
方法不能被重載
2、類及成員可見性
Dart中的可見性以library(庫)為單位
默認情況下,每一個Dart文件就是一個庫
使用下劃線_表示庫的私有性也可以是屬性和方法, 其它庫不能再導入使用,只能在當前庫使用
使用import導入庫
查看全部 -
閉包:
閉包是一個方法(對象),閉包定義在其它方法內部,閉包能夠訪問外部方法內的局部變量,并持有其狀態
void?main(List?args)?{ ??var?func?=?a(); ??func(); ??func(); } a()?{ ??int?count?=?0; ??return?(){ ????print(count++); ??}; }
查看全部 -
匿名方法
(參數1,參數2) {
? ?方法體...
return 返回值
}
匿名方法特性
1、可賦值給變量,通過變量進行調用
2、可在其它方法中直接調用或傳遞給其它方法
匿名方法不可以直接定義在外部, 要定義在main()方法里
void?main(List?args)?{ ??var?func?=?()?{ ????print("hello"); ??}; ??func(); }
2、
void?main(List?args)?{ ??var?list?=?["h",?"e",?"l",?"l",?"o"]; ??print(listTimes(list,?(str)?{?return?str*3;})); } List?listTimes?(List?list,?String?f(str))?{ ??for?(var?index?=?0;?index?<?list.length;?index?++)?{ ????list[index]?=?f(list[index]); ??} ??return?list; }
List?listTimes2?(List?list)?{ ??var?func?=?(str)?{?return?str?*?3;}; ??for?(var?index?=?0;?index?<?list.length;?index?++)?{ ????list[index]?=?func(list[index]); ??} ??return?list; }
查看全部 -
//Main程序入口 void?main(List?args)?{ var?list?=?["h",?"e",?"l",?"l",?"o"]; print(listTimes(list,?(str)?=>?times(str))); } List?listTimes?(List?list,?String?f(str))?{ ??for?(var?index?=?0;?index?<?list.length;?index?++)?{ ????list[index]?=?f(list[index]); ??} ??return?list; } String?times(str)?{ ??return?str*3; } 2、 //Main程序入口 void?main(List?args)?{ ??Function?p?=?printHello; ??p(); ??var?list?=?[1,2,3]; } printHello()?=>?print("hello");
查看全部 -
設置默認參數值
1、可使用 = 在可選參數后添加指定默認值
查看全部 -
break 終止當前循環體,若被包含不影響父循環執行
continue 跳過符合條件的一次循環
查看全部 -
Map創建
1、創建Map:var lan = {'key' : 'value','key' : 'value','key' : 'value'...}
2、創建不可變Map:?var lan = const {'key' : 'value','key' : 'value','key' : 'value'...}
3、構造創建:var lan = new Map();
查看全部 -
List(數組)創建
1、創建List : var list = [1,2,3];
2、創建不可變的List:var list = const[1,2,34]
3、構造創建:var list = new List();
常用方法
insert()插入, 原有數據往后順延
indexOf() 查字符所在索引并返回, 沒有找到返回-1
sublist()截取
查看全部 -
布爾型
1、使用bool表示?
2、只有true、false兩個值
查看全部
舉報