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方法