1. 安裝
下載:Dart Update 或者 下載dart sdk環境變量即可 鏈接:https://pan.baidu.com/s/10jsPHVI-g-QCiutx45MTKg 提取碼:0p5r
安裝vscode vscode 安裝dart 插件、Code Runner插件
2. Dart 基礎語法
1. 字符串
2. 數組
3. set 集合
4. map
字符串:
var str1="this is str1"
String str2= "tha is is str2"
String str3= '''A
B
''' //可以輸出直接保留行
print("$str1 $str2")
print(str1 + " " + str2)
if(str1 is String){ // 通過is 判斷類型
print(str1+str2 ); // 字符串拼接
}
// 空判斷
if(str.isEmpty){}
var mynum;
if(mynum==null){}
var mynum =0/0 返回
if(mynum.isNaN){}
int a=10 ;
print(a);
var myNum=12;
print(myNum.toString());
double d= 10.0;
bool flag= true;
List定義方式1:
var list= ["aa","bb"];
list.length
list[0]
List定義方式2:
var list2= new List<String>();
list2.add("bb");
list2.addAll(["cc","dd"])
lists2.indexOf("cc");
lists2.remove("cc");
lists2.removeAt(2);
lists2.fillRange(1,3,"java"); // 修改2,3 元素爲java
lists2.insert(2,"oc"); //執行位置插入
lists2.insertAll(2,["python","c"])
lists2.join(",") //轉化字符串join分隔
lists2.joon(",").split(",") // 轉化爲數組
for(var item in list){} // for-in
var newList= list.forEach( (value){
return value+"A"; // 修改集合數據
})
var newList =list.where( (value){ //過濾
retrun value>5;
})
var f = list.any((value){ //返回bool,集合中只要有大於5的返回true
return vlaue>5
})
var f= list.every( (value){ // 集合中每一個都滿足條件
return value> 5
})
Set: 集合數據不能重複
var s= new Set();
s.add("香蕉");
s.toList() // 轉化爲List
s.addAll(["a","a","b"]) //集合去重
Map:
var person={
"name":"xiaoming",
"age":20,
"work":["程序員","外賣"]
}
print(person["name"]);
var map =new Map();
map["name"]="xiaoming";
map.keys.toList() // 獲取所有Key
map.values.toList() // 獲取所有value
map.isEmpty //是否爲空
map.addAll({"son":"xiaoming"}); //增加屬性
map.remove("name") //根據key 刪除
map.containsValue("xiaoming") //是否有某一個value
map.forEach((key,value)){}
// 類型判斷
var str4="1234";
if(str4 is String){}
else if(str4 is int){}
類型轉化:
String str5 = "123";
int.parse(str5);
int a0= 10;
a0.toSting()
5. 函數
// 1.可選參數
String printUserInfo(String username,[int age]){
if(age!=null){
return "$username--$age";
} else{
return "$username";
}
}
printUserInfo("xiaoing");
// 2.默認參數
String printUserInfo1(String usernane,[int age,String sex='男']){
}
// 3.匿名參數
String printUserInfo2(String username,{int age,String sex}){}
printUserInfo2("xiaohei",age:20,sex="女"); 實參必須和形參名稱一致
// 4. 把方法單做參數
fn1(){
print("fn1")
}
fn2(fnName){
fnName();
}
fn2(fn1);
//5. 匿名方法
var fn= (){ print("x") }
fn();
6. 類 ,面向對象
class Perosn{
String name;
int age;
Perosn(this.name,this.age);
void printInfo(){
print("${this.name} -- ${this.age}");
}
Person.setInfo(String name,String age){
this.name= name;
this.age= age ;
}
}
void main(){
Person p1= new Person.setInfo("xiaoming",40);
p1.printInfo();
}
// Dart中 沒有提供訪問修飾符 ,在屬性或者方法前面 加_ 表示私有的
// 注意: 必須 放在一個 文件中把 類,否則無效
// Dart 中在 屬性和方法 前面添加 static,就是 靜態屬性方法,通過類. 可以直接訪問
// 注意: 非靜態方法可以訪問 靜態屬性、方法 , 靜態方法中不可以訪問 非靜態屬性、方法
class BlackMan extends Perosn{
BlackMan(String name,int age): super(name,age); //調用父類的構造函數
}
// 抽象類
abstract class Animal{
eat(); //抽象方法
printinfo(){ // 公共方法
print("公共方法")
}
// 接口,Dart 中 沒有interface 定義接口,通過abstract定義類單做接口即可,但是可以通過implements實現
abstract class Db{
Strin url;
delete();
}
class mysql implements Db{}
Dart多繼承:
mixins 中文意思是混入,就是類中混入其他功能
dart中 可以使用 mixins 實現類似多繼承功能
dart2.0 mixins規範:
1. 作爲 mixins的類 只能繼承 object
2. 作爲 mixins的類 不能有構造函數
3. 一個類可以 mixins多個 類
class A {
printA(){ print("A")}
}
class B {
printB(){ print("B")}
}
class Person{
String name;
Perosn(this.name);
}
class C extends Person with A,B{ //通過 with 語法實現 mixins, 通過繼承具備 A,B 類功能
Person(String name):super(name);
}
=============================================================================
Dart 中泛型方法、類、接口
提供類、方法的重用性代碼的
T getDate<T>(T value){
return value;
}
getDate<String>("AA");
class PrintClass<T>{
}
abstract class Cache<T>{}
classs FileCache<T> implements Cache<T>{}
7. dart中庫 dart中庫 的主要三種: 庫,分裝的功能集合
7.1. 自定義 庫: import '/lib/xxx.dart'
在lib下新建 Person.dart
import 'dart:io';
class Person{
void show(){
print("Person ... show");
}
}
void show1(){
print("show1");
}
hello.dart
import './lib/Person.dart' show show1 ;
void main(){
// lib.Person person=new lib.Person();
// person.show();
show1();
}
7.2. 系統內置庫:
import 'dart:math'
import 'dart:io'
import 'dart:convert'
print(max(10,30));
7.3. pub包管理的系統庫:
https://pub.dev/packages
https://pub.flutter.io.cn/packages
https://pub.dartlang.org/flutter
如何使用第三方庫:
1. 需要在自己項目根項目新建一個pubspec.yaml
2. 在 pubspec.yaml 文件 配置 名稱、描述、依賴等信息
name: xxx
description: A new flutter mudule project.
dependencies:
http: ^0.12.1
3. 運行 pub get 獲取包下載本地, 保存會自動執行vscode中
4. 項目中引入庫 import 'package:http/http.dart' as http; 看文檔使用
import 'dart:io';
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import './lib/Person.dart' show show1 ;
void main() {
var url = 'http://api.m.mtime.cn/PageSubArea/TrailerList.api';
// Await the http get response, then decode the json-formatted response.
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}.');
}
}
8.async 和 await
只有 async 方法才能使用 await 關鍵字調用
async : 把方法變成異步
await : 等待異步方法執行
requestNet() async{
String aa="abc";
return aa;
}
void main() async{
var result= await requestNet();
print(result);
}
9.庫導入修飾符:
問題,如果引入Person1、Person2.dart 都有Person類 ,那麼會報錯
import './lib/Person1.dart'
import './lib/Person2.dart'
解決,重名了:
lib.Person person=new lib.Person();
person.show();
import './lib/Person.dart' show show1 ; // 部分引入,只引入 show1方法
import './lib/Person.dart' hide show1 ; // 隱藏Person.dart 中 show1方法