flutter學習二:dart基本使用
阿新 • • 發佈:2019-01-03
基本
- 一切都是物件,每個物件都是類的例項(包括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;
}
註釋
- 單行://
- 多行:/內容/
- 文件