Flutter学习笔记-02-Dart语言

145 阅读3分钟

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类和asyncawait关键字;

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...