Dart入門

要學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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索