1 变量声明
- var变量一旦声明,类型不能改变,如string不能变成int
- 可以像swift的可选项这样写
int? a = 10;
bool? b = true;
2 匿名方法(又称闭包)
匿名方法就是没有名字的方法,可以用来给当做参数。
//1、方式一:
(var 参数名){
方法体
}
//2、方式二:
(类型 参数名){
方法体
}
//3、方式三:如果方法体只有一行代码可以将匿名方法用单行表示
(var 参数名) => 方法体
(类型 参数名) => 方法体
//4、方式四:省略 var 或类型
(参数名){
方法体
}
(参数名) => 方法体
3 数组
就是List
//1、可变长度数组
//定义一个 int 类型的可变数组
List<int> a = []; //等价:var a = <int>[];
//定义一个 String 类型的可变数组
var strs = <String>[]; //等价 List<String> strs = [];
//如下这种定义方式,编译器会给我们推断出是字符串类型的可变数组
var strs = ['字符串'];
4 Set集合
//1、方式一:使用 {} 定义一个 String 类型的 Set
var strSet = {"str"};
//2、方式二:定义一个空的 String 类型的 Set
var names = <String>{};
//3、方式三:通过 Set 对象定义一个可以保存 String 类型的 Set
var names = Set<String>();
5 异常处理
void main() {
try {
var s;
print(s.length);
} on NoSuchMethodError catch (e) {
//捕获异常并打印
print(e);
} catch (e, s) {
//兜底处理 e:抛出的异常对象 s:栈信息,此参数可写可不写
print(e);
print(s);
}
}
6 mixin混入
dart语言可以多继承的,用mixin替代calss声明一个类来继承。
//1、定义一个可以被 mixin 的类,使用 mixin 关键字代替 class 关键字即可
//2、继承被 mixin 的类,使用 with 关键字,如果有多个,中间用 , 隔开
mixin A{
void getA(){
print('A');
}
}
mixin B{
void getB(){
print('B');
}
}
class C{
void getC(){
print('C');
}
}
class CC extends C with A,B{}
void main() {
var cc = CC();
cc.getA();
cc.getB();
cc.getC();
print(cc is A);
print(cc is B);
print(cc is C);
}
//打印结果
A
B
C
true
true
true
7 异步任务
参考[这个教程]://juejin.cn/post/6976136324499636261#heading-11)
Dart是单线程语言,换句话说,Dart不是用子线程实现异步操作,我们在开发进行耗时操作(比如网络请求、数据库存储、文件读取)时会阻塞我们的程序.Dart的并发机制可以在等待一个操作完成的同时进行别的操作。 在Dart中执行异步操作,可以用Future类和async、await关键字;
Future
Future 简单来说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作。一个Future只会对应一个结果,要么成功,要么失败。 下面是一个例子
Future.wait([
// 2秒后返回结果
Future.delayed(Duration(seconds: 2), () {
return "hello";
}),
// 4秒后返回结果
Future.delayed(Duration(seconds: 4), () {
return " world";
})
]).then((results){
print(results[0]+results[1]);
}).catchError((e){
print(e);
});
async 和 await
1、async 关键字的作用就是标记一个函数是异步函数
2、await 关键字的作用是等待异步任务的结果
void main() async{
var url = "https://www.baidu.com/";
//请求 url, 通过 await,等待 future 异步计算任务的结果,执行成功就直接返回结果
var response = await http.get(Uri.parse(url));
print('Response status: ${response.statusCode}');
print('main end...');
}
//打印结果
Response status: 200
main end...