從零學習Flutter(一):初識Dart


Fluter是Google推出的跨平台開發App的一套框架,很多人都說,Google出品比屬於金品,故,我也來湊湊熱鬧,Fluter是用Dart寫的,所以在用Fluter之前,我們還是有必要簡單了解一下Fluter的。之前的一直使用Facebook推出的RN框架寫App,感覺RN的hot reload 做的不是那么完美,今年試了一下fluter,感覺他的hot reload比RN的好多了,另外,Fluter用dart寫,dart算是強類型吧,比es6要爽的多,代碼容錯率大大提高。

廢話不多說,簡單介紹一下。

class Bicycle {
  int cadence;
  int speed;
  int gear;
  int _speed=0;
  
  Bicycle(this.cadence, this.gear);
  //Bicycle(this.cadence, this.speed, this.gear);
  int get Speed=>_speed;
  @override
    String toString() => 'Bicycle: $Speed mph';
  
  void applyBrake(int decrement) {
      _speed -= decrement;
    }

    void speedUp(int increment) {
      _speed += increment;
    }
}

void main() {
  var bike =new Bicycle(23,2); //new Bicycle(2, 3, 1);
  print(bike);
  print(bike.cadence);
  bike.applyBrake(2);
  print(bike.Speed);
}

上面這段代碼

1.定義一個class,class不用聲明public,因為默認就是public,特別注意:在 Dart 中沒有諸如 public、private、protected 這樣的關鍵詞

2.申明變量,變量默認是public,eg:int cadence;如果要申明私有變量,在變量前加一個下划線即可,eg:int _cadence;所有未初始化的變量,值都為null,無論int,stringdart中沒有屬性一說,申明的變量就自帶get,set訪問器,默認情況下,Dart 會為所有公開的變量提供存取方法,除非你需要提供僅僅可讀、可寫,或者在某些情況下需要在 getter 方法中進行計算或是在 setter 方法中進行某些值得更新,否則都不需要再重新定義存取方法,如果想定義一個變量為只讀,可以這樣,eg:int get Speed=>_speed;如果想定義一個變量為可寫,可以這樣,eg:int set Speed=>_speed;特別注意:在 Dart 中沒有諸如 public、private、protected 這樣的關鍵詞

3.所有的 Dart 類中都有一個 toString() 方法,你可以復寫這個方法來提供更具體的輸出信息,修飾符 @override 會告訴分析器你當前是在復寫某個成員方法,如果該復寫不成功,分析器就會報錯,eg:

@override

String toString() => 'Bicycle: $Speed mph';

4.說到這里,提一下dart里的字符串模板,可以在字符串內使用 ${expression} 的方式來實現字符串模板的效果,如果該表達式僅僅是一個標識符,還可以去掉花括號 $variableName

例子如上

5.針對只有一行的方法可以使用 => 來簡化方法的書寫,=>既可以叫:箭頭函數也可以叫Lamada表達式,例子如上

6.再說一下dart 類中的構造函數,dart中構造函數不可以向C#/java里那樣直接重載,在構造函數的參數中使用 this 可以直接對實例變量進行賦值,不用再編寫多余的代碼

eg:下面這兩段代碼是相同功效的

class Bicycle {
  int cadence; int speed; int gear;
  //1.
  Bicycle(this.cadence, this.speed, this.gear);

}

class Bicycle {
  int cadence;
  int speed;
  int gear;
  
//2.
Bicycle(int cadence, int speed, int gear) { this.cadence = cadence; this.speed = speed; this.gear = gear; }
}
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
7.dart中的main方法,main() 方法是 Dart 的主方法,如果你需要訪問命令行傳遞過來的參數,可以使用 main(List<String> args方法,main() 方法存在於最外層的作用域,
在 Dart 中你可以在類之外編寫代碼,變量、方法、存取方法都可以獨立於類之外維持生命周期

8.dart2中,方法中調用另一個類中的方法,new 變成可選的,在 Dart 2 中,new 關鍵字變成了可選的,如果你確信某個變量的值不會再發生改變,你可以使用 final 來代替 var

9.Dart 語言並沒有提供 interface 關鍵字,但是每一個類都隱式地定義了一個接口

10.dart中的函數編程
String scream(int length) => "A${'a' * length}h!";

main() {
  final values = [1, 2, 3, 5, 10, 50];
  for (var length in values) {
    print(scream(length));
  }
}
//output
Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!
效果等同於:
將上述代碼中的 main() 方法中的 for() {...} 替換為下面的一行代碼,它直接使用了鏈式調用的方式:
values.map(scream).forEach(print);

參考文獻:https://codelabs.flutter-io.cn/codelabs/from-java-to-dart-cn/index.html#5

dart官網:https://www.dartlang.org/

 
 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM