1. dynamic与Object
Object 是所有Dart所有对象的根基类,Dart中所有类型都是Object的子类(包括Function和NULL),所以任何数据都可以赋值给Object声明的对象。dynamic和Object声明的变量都可以赋值任何对象,且以后可以改变赋值的类型。
dynamic与Object不同的是dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用 Object 的属性与方法, 否则编译器会报错。
2. final和const
const是编译时常量(编译时直接替换为常量值),而final是第一次使用时被初始化。
3. 异步支持
Dart中有很多返回Future或者Stream对象的函数,这些函数被称为异步函数。它们只会在设定完成一些耗时操作后返回,如IO操作,而不是等到这个操作完成。
async和await关键词支持异步编程,可以写出和同步代码很像的异步代码。
3.1 Future对象
Future和JavaScript中Promise很像,表示一个异步操作的最终完成(或者失败)及其结果值的表示。它用来处理异步操作,异步处理成功就执行成功的操作,异步执行失败就执行失败的操作。一个Future只对应一个结果,那么成功,要么失败。
Future的所有API的返回值都是一个Future对象,所以可以进行链式调用。
在两组耗时操作完成之后做一些处理,使用wait
3.2 async和await
Dart中async和await和JavaScript中async和await功能一样:异步任务串行化。
回调地狱(Callback Hell)
消除回调地狱
方式一:使用Future链式调用
方式二:使用async和await
3.3 Stream对象
Stream也可以接受异步事件数据,和Future不同的是,它可以接受多个异步操作的结果。在执行异步任务时,可以通过多次触发成功或失败事件来传递数据或错误异常。









网友评论