Dart学习

变量

var 用于申明变量

可为空 ?

不可变 final const

final 的值只能被设定一次,而const则是一个编译时的常量

数据类型

Number String Boolean List Map

运算符

常规运算符

条件运算符:?: ??

也就是js的三元运算符和空值合并符

测试运算符

is

特有的运算符:

?. 当被调用者不为空的情况下执行

is is! 检查对象是否属于或不属于某种类型

as 将对象类型转换

?? 空值检测,如果为空返回后面的值

.. 链式操作

??= 空值判断,左边值为null的情况下进行赋值

dart和js太像了,从语法和概念上来看都很像.

抽象类

用于定义一些基本的结构,具体实现由抽象类的子类来完成

模块化

导入包

    import 'dart.math'

定义库

library

导出

export

异步编程

使用Future,async/await

Future 表示一个异步操作的结果,有三种状态:完成、错误、未完成

和js类似,只能在async中使用await

await表示等待执行结果


协程是一种轻量级的现场,可以在程序内部进行切换,不需要依赖操作系统的线程管理。

宏任务

定时器事件

Timer,在指定的时间后执行回调函数


    Timer(Duration(seconds:2),()=>{
        print('Timer Event')
    })

IO事件

文件读写,网络请求

UI事件

Flutter 用户交互


宏任务与微任务相对,宏任务的执行顺序在微任务之后

常见的微任务:Future.then()回调、async/await回调、scheduleMicrotask()函数

isolate

在dart中,所有的代码都运行在一个单线程中,这个线程是主isolate,如果需要执行耗时的计算,可以创建一个新的isolate

isolate之间不能共享内存,因此只能通过消息来进行通信。

消息传递

Sendport ReceivePort 是进程间通讯的工具,sendport发送消息,在receiveport中接收消息。


  var rec = ReceivePort();

  var send = rec.sendPort;

  for (var element in [1, 2, 3, 4, 5, 6]) {
    send.send(element);
  }

  rec.listen((message) {
    print(message);
  });

isolate的应用场景:数据处理,网络请求,web服务

泛型

泛型在编程中的概念是允许在代码中使用占位符,然后在实例化方法、类的时候指定占位符所代表的实际类型