要學Flutter必先學Dart,Dart和Java的語法很像,學過Java的人很快就能入手javascript
Dart下載地址https://dart.dev/get-dartphp
VSCode下載地址https://code.visualstudio.com/java
VSCode裝好之後,安裝插件Chinese漢化插件、Dart插件、code runner插件python
1.基礎json
main(){ print('你好 dart');}
var會自動推斷變量類型,賦值類型不一致會報錯api
常量用const或final定義,final是懶加載的,編譯時不賦值,運行時才賦值數組
* 三個單引號或三個雙引號容許字符串內部換行,一個單引號和雙引號都不行bash
void main(){ String str = ''' 這是第一行 這是第二行 這是第三行 '''; print(str);}
* 字符串的拼接微信
void main(){ String str1 = "你好"; String str2 = 'Dart'; print(str1+str2); print("$str1$str2");}
數值只有int和double兩個類型閉包
* map字典類型
void main(){ var person={ "name":"張三", "age":20 }; print(person["name"]);}
* 判斷變量類型
void main(){ var str = '1234'; if(str is String){ print('str是String類型'); }}
* 非空不賦值
void main(){ int b; //若是b爲空,才賦值 b??=3; print(b); b??=6; print(b); }
void main(){ var a; var b=a??10; print(b);}打印10
* 類型轉換
void main(){ String str = '111'; var myNum = int.parse(str); print(myNum is int);}void main(){ List myList =['香蕉','蘋果','西瓜']; myList.fillRange(1,2,'梨子'); print(myList);}
輸出[香蕉, 梨子, 西瓜]
* 數組轉字符串
void main(){ List myList =['香蕉','蘋果','西瓜']; var str = myList.join('-'); print(str);}
輸出香蕉-蘋果-西瓜
* 條件判斷
any只要有一個值符合條件就返回true,every必須全部值都符合條件才返回true
void main(){ List myList =[1,3,4,6,7,9,10]; var newList = myList.where((value){ return value>5; }); print(newList.toList());}輸出[6, 7, 9, 10]void main(){ List myList =[1,3,4,6,7,9,10]; var newList = myList.any((value){ return value>5; }); print(newList);}輸出truevoid main(){ List myList =[1,3,4,6,7,9,10]; var newList = myList.every((value){ return value>5; }); print(newList);}輸出false
* 迭代
void main(){ var s=new Set(); s.addAll([1,22,333]); s.forEach((value)=>print(value));}輸出122333
* 可選參數,默認參數
void main(){ print(printUserInfo("張三"));}
String printUserInfo(String username,[String sex='男',int age]){ if(age!=null){ return "姓名:$username--年齡:$age--性別:$sex"; } return "姓名:$username--年齡保密--性別:$sex";}輸出 姓名:張三--年齡保密--性別:男
* 把方法當作參數來傳遞
fn1(){ print('fn1');}
fn2(a){ a();}
main(){ fn2(fn1);}輸出 fn1
* 箭頭函數
main(){ List list=['蘋果','香蕉','西瓜']; list.forEach((value)=>print(value)); list.forEach((value)=>{ print(value) });}
* 匿名函數
main(){ var printNum=(){ print(123); }; printNum();}
* 自執行方法
((n){ print('我是自執行方法 $n'); })(12);
全局變量會常駐內存,污染全局;局部變量不常駐內存,會被垃圾機制回收,不污染全局
* 閉包可以常駐內存,且不污染全局
main(){ fn(){ var a =123; return(){ a++; print(a); }; }
var b = fn(); b(); b(); b();}
輸出:124125126
* 命名構造函數
class Person{ String name; int age; //默認構造函數的簡寫 Person(this.name,this.age); //命令構造函數 Person.now(){ print('我是命名構造函數'); } //命令構造函數 Person.setInfo(String name,int age){ this.name = name; this.age = age; } void printInfo(){ print("${this.name}---${this.age}"); }}main(){ Person p1 = new Person('張三',20); p1.printInfo();
Person p2 = new Person.setInfo('李四',30); p2.printInfo();}
變量前面加下劃線_,就申明爲私有變量了;方法前面加下劃線_,就申明爲私有方法了
* 經過訪問屬性的方式訪問方法
class Rect{ num height; num width; Rect(this.height,this.width); get area{ return this.height*this.width; } set areaHeight(value){ this.height = value; }}main(){ Rect r = new Rect(10, 4); r.areaHeight = 6; print("面積:${r.area}");}
初始化屬性
class Rect{ num height; num width; Rect():height=2,width=10{
} get area{ return this.height*this.width; } set areaHeight(value){ this.height = value; }}main(){ Rect r = new Rect(); print("面積:${r.area}");}
2.屬性
* 繼承
class Person{ String name; num age; Person(this.name,this.age); void printInfo(){ print("${this.name}---${this.age}"); }}
class Student extends Person{ String sex; Student(String name,num age,String sex) : super(name,age){ this.sex = sex; } @override void printInfo(){ print("${this.name}---${this.age}---${this.sex}"); //調用父類的方法 super.printInfo(); }}
main(){ var p; //當p爲null時不會執行 p?.printInfo(); p = new Person('張三', 20); //強制轉換類型 (p as Person).printInfo(); //連綴操做 p..name="李四" ..age=30 ..printInfo(); //子類繼承及複寫 Student s = new Student('王五', 10,'男'); s.printInfo();}
dart沒有interface關鍵字,能夠用abstract關鍵字
* mixins至關於多繼承
class A{ void printA(){ print("A"); }}
class B{ void printB(){ print("B"); }}
class C with A,B{
}
void main(){ var c = new C(); c.printA(); c.printB();}
做爲mixins的類不能有構造函數,不能繼承其餘類,並且若是with順序不一樣,相同方法會覆蓋
3.調庫
* 調用內置庫
import 'dart:convert';import 'dart:io';import 'dart:math';
void main() async{ print(min(12, 14)); var result = await getDataFromZhihuAPI(); print(result);}
getDataFromZhihuAPI() async{ //1.建立HttpClient對象 var httpClient = new HttpClient(); //2.建立Uri對象 var uri = new Uri.http('news-at.zhihu.com', '/api/3/stories/latest'); //3.發起請求,等待請求 var request = await httpClient.getUrl(uri); //4.關閉請求,等待響應 var response = await request.close(); //5.解碼響應的內容 return await response.transform(utf8.decoder).join();}
調用asyc必需要用await
* 第三方庫的地址是https://pub.dev
配置文件pubspec.yaml
name: XXXdescription: A new flutter module projectdependencies: http: ^0.12.0+2 date_format: ^1.0.6
cmd命令行執行pub get下載庫
例子
import 'dart:convert' as convert;//重命名import 'package:http/http.dart' as http;//重命名
main(List<String> arguments) async { // This example uses the Google Books API to search for books about http. // https://developers.google.com/books/docs/overview var url = "https://www.googleapis.com/books/v1/volumes?q={http}";
// Await the http get response, then decode the json-formatted responce. var response = await http.get(url); if (response.statusCode == 200) { var jsonResponse = convert.jsonDecode(response.body); print(jsonResponse); var itemCount = jsonResponse['totalItems']; print("Number of books about http: $itemCount."); } else { print("Request failed with status: ${response.statusCode}."); }}
導庫使用as重命名解決衝突的問題,導庫後使用show或hide能夠限制部分引入
歡迎關注個人微信公衆號:安卓圈
本文分享自微信公衆號 - 安卓圈(gh_df75572d44e4)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。