1. 程式人生 > >flutter學習二:dart基本使用

flutter學習二:dart基本使用

基本

  • 一切都是物件,每個物件都是類的例項(包括null),所有類都繼承自object
  • 指定資料型別和編譯時常量可以提高執行效率
  • dart沒有作用域,以“_”開頭表示方法或者屬性為私有的
  • 未被初始化的都會被賦值為:null

關鍵字

  • var:變數
  • dynamic:不指定型別
  • final:常量
  • const:編譯時常量

內建資料型別

num

  • 子類:int,double
  • 包含操作(+,-,*,/,<<,>>,|)
  • int (-2^53 - 2^53)
  • double

String

  • 字串插值

    $variableName

  • 可用:+

  • 可以使用三個‘ 或“來定義多行的String 型別
    var s1 = ”’
    this can change
    in next line.
    ”’

bool

  • true
  • false

List

var list = [A,B,C];

Map

  • 建立

    var name = {
    ‘firstname’ : ‘long’,
    ‘secondname’: ‘wen’,
    ‘thirdname’ : ‘jiang’
    };

  • 或者:
    var name = new Map();
    gifts[‘firstname’] = ‘long’;
    gifts[‘secondname’] = ‘wen’;
    gifts[‘thirdname’] = ‘jiang
    ‘;

函式

如果函式只有一條語句可以:=>

入參

  • 可選:
String getName(String firstname, String secondname, [String thirdname]) {
  var name = '$firstname $secondname';
  if (thirdname != null) {
    name = '$name $thirdname';
  }
  return name;
}
  • 引數預設值(呼叫時可以不寫入參)
String getName1({String firstname: "long"
, String secondname : "wen"}) { var name = '$firstname $secondname'; return name; }

傳遞函式給函式

printElement(element) {
  print(element);
}
var list = ["long", "wen", "jiang"];
list.forEach(printElement);

被巢狀的函式可以訪問外層變數

函式返回值

  • 所以的函式都會有返回值。
  • 如果沒有指定函式返回值,則預設的返回值是null。
  • 沒有返回值的函式,系統會在最後新增隱式的return 語句

操作符

算術操作符

  • 和java類似
  • 支援自增自減操作

型別比較操作符

  • is:來比較前運算元是否是後運算元的物件。
  • as:將前運算元指定為後運算元的型別。

條件表示式

  • 三目

聯級操作符

  • (..) 可以重複操作統一物件

流程控制

if and else

for loops

while and do-while loops

break and continue

switch and case

assert:斷言

assert(text != null);

  • assert 判斷的條件可以是任何可以轉化為 boolean 型別的物件,即使是函式也可以(此時判斷的是函式返回值)。

  • 如果assert 的判斷為true, 則繼續執行下面的語句。反之則會丟出一個異 AssertionError 。

try-catch and throw

物件

建立物件

  • 建立類
class Point {
  num x;
  num y;
}
  • 建立物件並賦值
var point = new Point();
point.x = 4; 
assert(point.x == 4); 
assert(point.y == null); //預設為null
  • 建構函式(預設有無參建構函式)
class Point {
  num x;
  num y;
  Point(this.x, this.y);
}
  • 類初始化順序:
    • 初始化器列表
    • 超類的無引數建構函式
    • 主類的無引數建構函式
  • 靜態方法

static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
  • (?.)判斷是否為空
    p?.y = 4;

  • 使用庫

    import ‘package:flutter/material.dart’;

  • 庫命名

    import ‘package:lib2/lib2.dart’ as lib2;

  • 懶載入庫

    import ‘package:greetings/hello.dart’ deferred as hello;

  • 懶載入庫使用
    await hello.loadLibrary();
    hello.printGreeting();

非同步

  • async
  • await
main() {
//  test1();
//  testClass();
    testSync();
}

/*
* 非同步方法 async, 雖然非同步函式可能會執行耗時的操作,但不會等待這些操作。
* 相反,非同步函式僅在遇到第一個await表示式(細節)時才執行。然後它返回一個Future物件,
* 僅在await表示式完成後才恢復執行
* */
Future testSync() async {
  try{
    var version = await lookUpVersion();
    print(version);
  }catch(e){

  }
}
int lookUpVersion() {
  return 2;
}

註釋

  • 單行://
  • 多行:/內容/
  • 文件