Flutter —— dart基礎語法
- 1. Flutter 專案創建
- 2. Dart 語法
- 2.1 var、final和const
- 2.2 num
- 2.3 string
- 2.4 list 和 map
- 2.5 ??= 和 ??
- 2.6 方法 和 箭頭函式
- 2.7 方法的可選引數
- 2.8 方法作為引數傳遞
- 2.9 匿名函式
- 2.10 閉包
1. Flutter 專案創建
Flutter配置完之后,就可以在Android studio 創建 Flutter專案啦,

點擊Create New Flutter Project之后,這里就會有四個選項:
Flutter Application: 創建一個 Flutter 應用工程Flutter plugin: 這是為了給 Android 和 iOS 提供插件應用(暴露的借口)的時候使用Flutter Package: 創建一個 Dart組件 發布到 pub 來提供便捷開發 類似一些三方庫Flutter Module: 一般用來做混合開發,嵌入到 Android 和 iOS 工程當中!

之后輸入工程名字,工程地址,然后選擇next,工程名字不能用駝峰命名,

這里就Finish啦,

到這里,工程就創建好了,并且可以跑起來了,

2. Dart 語法
2.1 var、final和const
-
var: 宣告變數,可以賦值不同的型別,宣告到變數如果沒有初始化,那么值為null,并且之后可以賦值為不同的型別,如果初始化賦值了那么變數的型別就確定了,

-
final:宣告一個只能賦值一次的變數,

可以先宣告,之后賦值, 但是宣告之后沒有賦值,就不能被使用,

-
const:宣告常量,宣告的時候就需要賦值,宣告之后不能被改變,
2.2 num
num:宣告之后需要賦值才能夠被使用的變數,可以賦值Int或者Double的值,

Flutter 里面多了一個運算子~/,用來取整,并且通過toDouble(),toInt()進行資料型別轉換,

2.3 string
Flutter 中的字串可以使用單引號或者雙引號創建,并且可以使用+進行字串的拼接,使用 *進行字串的復制,使用a[x]來獲取相對應位置的character,

字串還可以使用三個引號或者雙引號來創建多行字串,并且可以看到雙引號創建的多行字串是拼接在一起的,而三個引號創建的字串則是保留換行的,

Flutter 里面取外面的值只需要在字串里面添加${}即可,

如果在字串中需要/n而不是換行,那么直接在字串前面添加r就可以了,

2.4 list 和 map
list,Dart中的串列:
var list1 = [1,2,3];創建可變串列,var list1 = const [1,2,3];創建不可變串列,- 可以存放不同的型別

指定位置添加元素,
list1.insert(0, "asd");
洗掉指定元素,
list1.remove("asd");
清除所有元素,
list1.clear();
陣列排序,
list1.sort();
取sublist(這里取到的范圍是1-2,也就是包含前面不包含后面),
list1.sublist(1,3);
list 轉為map
list1.asMap()
如果是不可變陣列進行陣列的操作就會報錯,

map,dart中的鍵值對,
var dic1 = {'one':'xiaolu','two':'xiaoshun'};創建可變串列,var dic1 = const {'one':'xiaolu','two':'xiaoshun'};創建不可變串列,
字典取值
dic1["one"]
獲取字典長度
dic1.length;
獲取字典所有的值
dic1.values;
獲取字典所有的鍵
dic1.keys;
2.5 ??= 和 ??
??= : 如果這個變數的值為空的時候則進行賦值,否則就不進行賦值,

?? : 如果左邊有值回傳左邊,否則就回傳右邊,

2.6 方法 和 箭頭函式
Dart 中的方法也是一個物件,回傳值和引數型別可以省略,當方法的執行陳述句只有一句的時候,可以使用箭頭函式 => 運算式,
void main() => functionDemo();
正常的函式
int sum(int a, int b) {
return a + b;
}
忽略回傳值和引數型別
sum( a, b) {
return a + b;
}
2.7 方法的可選引數
傳遞可選引數必須帶上形參的名字,
sum(int a,{ b, c}){
b ??= 0;
c ??= 0;
return a + b + c;
}
這樣呼叫的時候,就要帶上形參的名字,這里的順序可以顛倒,
sum(1,c:2,b:3);
這里也可以只傳一個可選引數,當然也可以都不傳,
sum(1,b:3);
sum(1);
函式如果將可選引數的型別定義為 Int,String等型別,需要在Int,String后面添加一個?,這樣就會有null ability,引數就可以為空了,但是這里要記得處理引數為空的情況,
sum(int a,{int? b,int? c}){
b ??= 0;
c ??= 0;
return a + b + c;
}
或者可以給引數一個默認值,
sum(int a,{int b = 0,int c = 0}){
return a + b + c;
}
還有一種方法不需要傳遞引數的名字,只需要按順序輸入值就可以了,這里不能跳過b給c賦值,如果只輸入兩個引數,那么就會賦值a和b,
sum(int a,[int b = 0, int c = 0]){
return a + b + c;
}
呼叫
sum(1,2,3);
sum(1,2);
2.8 方法作為引數傳遞
方法在dart中也是一個物件,在dart中,萬物皆物件,所以可以賦值給一個變數,并且變數可以執行函式,
var sum = sum1(1,2,3);
//執行函式
sum();
方法也可以作為引數傳遞,這里就會分別列印1,2,3,4,
var list = [1,2,3,4];
list.forEach(print);
forEach原始碼:
void forEach(void action(E element)) {
for (E element in this) action(element);
}
方法作為引數:
void functionDemo() {
sum2(sum1);
}
void sum2( func(int a,[int b , int c ])){
print(func(1,2,3));
}
sum1(int a,[int b = 0, int c = 0]){
return a + b + c;
}
2.9 匿名函式
匿名函式就是沒有方法名稱的方法,
var func = () {
print('匿名方法');
};
// 呼叫
func();
還有一種匿名方法是立即執行函式,
(() {
print('立即執行函式');
})();
匿名方法也可以作為引數傳遞
sum2((int a,[int b = 0, int c = 0]){
return a + b + c;
});
2.10 閉包
閉包(closure),定義在函式里面的函式就是閉包,閉包也是一個物件,閉包可以訪問外部函式的區域變數,
funcA() {
int count = 0;
return ()=>print(count++);//這個匿名函式就是一個閉包,
}
這里閉包會一直持有count,count會一直存在不會被釋放,這里func2是回傳的一個新的物件,所以會重新開始,
void closureDemo(){
var func = funcA();
func();
func();
func();
func();
var func2 = funcA();
func2();
func2();
}
funcA() {
int count = 0;
return ()=>print(count++);//這個匿名函式就是一個閉包,
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/304562.html
標籤:其他
上一篇:Unity打包apk總結
