Flutter 是 Google 開源的 UI 工具包,幫助開發者通過一套代碼庫高效構建多平臺精美應用,支持移動、Web、桌面和嵌入式平臺
flutter是基於dart語言開發的,我們將首先通過幾章節介紹下dart語言,再詳細的學習flutter
1.dart裏面是有類型的,並且具有類型校驗校驗 ,如果不申明具體類名,而是用var,dart就會自動推斷變量類型
2.dart變量名稱是區分大小的,name和Name是兩個不同的變量
3.dart數據類型(可以通過is關鍵字判斷類型):
- 整形 int 浮點型:double double可以被賦值整形或者浮點型,但是int必須是整型。
- 字符串 String
- 布爾 bool
- Lsit (數組)
- Map (字典),類似於js中的對象
//用var來定義變量,能定義任何變量,但是會自動推斷變量類型,一旦賦值給某個具體的變量類型後,變量類型不會發生變化了
// void表示沒有返回值,所有的dart代碼需要放在main方法裏面
//下面定義了一個數組,數組的增加是通過add()
void main(){
var arr=new List();
arr.add('張四');
arr.add('張五');
arr.add('張六');
print(arr);
}
不同類型的變量,可以通過一些方法進行轉換類型,如下:
/**
* 1,number和String類型之間的轉換
* number=>String toString()
* String=>number parse()
* 2,isEmpty:可以判斷字符串是否爲空
*/
String str='123';
int myNum=int.parse(str);
// var myNum=double.parse(str);
//dart中,打印信息用print,這個是全局方法,類似於js中的console.log()
print(myNum is int);
**tips:如果預知代碼可能會出現bug,可以將代碼包在try-catch裏面,如下:
String price='';
try{
var myNum=double.parse(price);
print(myNum);
}catch(err){
print(0);
}
dart中主要有三種集合類型:
List(類似js中的數組):
-
List屬性:
- isEmpty:是否爲空
- isNotEmpty:是否不爲空
- reversed:數組翻轉
-
List方法:
- add:增加元素,增加一個
- addAll:增加元素,增加多個,傳入的是一個數組(主要的功能是拼接數組)
- indexOf:查找某個元素的索引
- remove:刪除某個元素
- removeAt:刪除某個索引的元素
- fillRange:修改
- insert(index,value):指定位置插入數據
- insertAll:插入多個數據
Set(去重,方法和List差不多,將Set轉化成List,通過toList())
var list=['蘋果','香蕉','桃子','蘋果','香蕉','桃子','蘋果','香蕉','桃子'];
var set=new Set();
set.addAll(list);
var list1=set.toList();
Maps:其類似於json,但是鍵名需要用引號引起來
var person={
"name":"jack"
}
-
常用屬性:
- keys:所有的鍵
- values:所有的鍵值
- isEmpty:
- isNotEmpty:
-
常用方法:
- addAll:一次增加多個鍵值對
- remove:
對於三個集合(List,Set,Map)有些公共的循環遍歷方法:
- for-in
- forEach():類似於es6中的forEach
- map:類似於es6中的map
- where:類似於es6中的filter
- any:類似於es6中的some
- every:類似於es6中的every
函數:包括系統函數+自定義函數
- 系統內置的函數:比如print
- 一個方法中是可以嵌套其他方法的,而且可以嵌套很多層,這時候需要注意方法的作用域,(方法裏面套方法,返回內部的方法,這就是閉包)
- 給方法命名建議使用駝峯,首字母是小寫,給類命名也是駝峯,但是首字母需要大寫
- 注意dart中的方法是沒有關鍵字function,這個要注意
*dart中的可選參數,需要將參數放在:[ ]
- 箭頭函數只能寫一句話,和es6中的箭頭函數有點區別,
- 方法的形參儘量加上類型
- 全局變量:會常駐內存,容易污染全局
- 局部變量:不會常駐內存,會被垃圾機制回收,不會污染全局
- 如果想讓一個變量常駐內存,而且不污染全局,只能用閉包實現,閉包也是這個目的
類
class Person{
String name;
int age;
// 構造函數,名字和類名一樣
Person(name,age){
this.age=age;
this.name=name;
}
//上面有個簡寫的方法:
//Person(this.name,this.age)
getInfo(){
return '$name--$age';
}
}
main(){
/**
* 類(三大特性:封裝,繼承,多態),
* 類需要放到main函數外面
*/
Person p=new Person('唐凱震',25);
print(p.getInfo());
}
掃碼關注公衆號,有更多精彩文章等你哦