最近需要開發一個app,從文檔,社區,時間方面斟酌了一下,最后還是決定用flutter,dart是flutter的主要開發語言,此文為dart學習總結。
閱讀此文前最好有點java或者c#之類的基礎
參考:https://codelabs.flutter-io.cn/codelabs/from-java-to-dart/#0
1.創建一個簡單dart class
我們程序都會有一個主入口(跟java,c#類似),dart也一樣,main函數是作為程序的啟動入口。我們定義一個名為"Bicycle"的class,里面有會有3個屬性,分為"cadence","speed","gear";
class Bicycle {
int cadence;
int speed;
int gear;
}
void main() {
}
假如是java或者c#,我們一般會在"class"或"void"關鍵字前加上public, private,protected修飾權限,假若不加,會默認為"private";但dart沒有這些關鍵字,dart會默認為"public",如果我們需要用到private,后面將會介紹到‘read-only 變量’
2.定義構造函數
dart的構造函數是寫成這個樣子的:
Bicycle(this.cadence, this.speed, this.gear);
后面記得加分號";",不然你會收到一個編譯錯誤,我們使用this關鍵字指向類的屬性,這個寫法其實就是相當于
Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence;
this.speed = speed;
this.gear = gear;
}
3.創建實例
以前我們創建實例會用到new關鍵字
var bike = new Bicycle(2, 0, 1);
在dart里,new變成一個可選關鍵字,可用可不用(感覺好多東西簡化了- -:)
var bike = Bicycle(2, 0, 1);
至此,我們先在我們目前的代碼運行一下吧,我是用在線編譯看效果:https://dartpad.cn/
class Bicycle {
int cadence;
int speed;
int gear;
Bicycle(this.cadence, this.speed, this.gear);
}
void main() {
var bike = Bicycle(2, 0, 1);
print(bike);
}
運行上面代碼,我們應該能看到控制臺輸出[Instance of 'Bicycle' ]
注意到我們直接print的是bike實例,其實就是相當于我們java或c#的"object.ToString()"吧,直接把object print出來。
每一個dart類,其實都繼承了一個toString方法的,我重寫一下toString方法,讓它輸出我們想要格式:
@override
String toString() => 'Bicycle: $speed mph';
@override其實就是告訴編輯器我要改成你某個成員方法,至于箭頭函數"=>"就是簡寫return 'Bicycle: $speed mph';
3.read-only變量
某些變量我們不想暴露出去讓別人隨便,在java或c#我們可以private修飾,在dart,我們則要把屬性的名字,在開始處加一個"_",但同一個類庫下還是可以被其他類訪問,假如不同類庫則不可以。
然后我們某些屬性只希望它讀取不能被修改,在java或c#我們會指定屬性為get,在dart也類型。
我們現在把speed設置為私有,并提供一個可讀取的變量:
int _speed = 0;
int get speed => _speed;
然后修改一下構造函數,把speed參數去掉
Bicycle(this.cadence, this.gear);
自己再加點方法,設置speed的值,完整代碼如下:
class Bicycle {
int cadence;
int _speed = 0;
int get speed => _speed;
int gear;
Bicycle(this.cadence, this.gear);
void applyBrake(int decrement) {
_speed -= decrement;
}
void speedUp(int increment) {
_speed += increment;
}
@override
String toString() => 'Bicycle: $_speed mph';
}
void main() {
var bike = Bicycle(2, 1);
bike.speedUp(10);
print(bike);
}
可以看到輸出是:Bicycle: 10 mph