2021年 创业末段遇到的最大困难就是:基于 Dart 2.12+ 对现有项目重构,如今重新学习语法变更,大家可以参照 AlexV525 这篇官方的译文文章对照学习,深入理解 Dart 空安全
1. Never 类型用于抛出异常
2. == null 和 != null 的表达式会进行变量提升
3. 除此以外需要使用后置! 代表非空断言
4. 避空运算符级联时只写一次
// 使用了空安全:
showGizmo(Thing? thing) {
print(thing?.doohickey.gizmo);
}
5. late 关键字
-
将类型约束延后至运行时
late String _temperature; -
在一个包含初始化内容的字段上使用 late, 会让初始化延迟执行
// 使用了空安全: class Weather { late int _temperature = _readThermometer(); }实例字段的初始化可以访问到 this、调用方法以及访问实例的字段
6.required 关键字
7. Map操作符 [] 固定返回可空类型,需要 []!
8. 总结:
您需要掌握的核心要点有:
- 类型默认是非空的,可以添加
?变为可空的。 - 可选参数必须是可空的或者包含默认值的。 您可以使用
required来构建一个非可选命名参数。 非空的全局变量和静态字段必须在声明时被初始化。 实例的非空字段必须在构造体开始执行前被初始化。 - 如果接收者为
null,那么在其避空运算符之后的链式方法调用都会被截断。 我们引入了新的空判断级联操作符 (?..) 及索引操作符 (?[])。 后缀空断言“重点”操作符 (!) 可以将可空的操作对象转换为对应的非空类型。 - 新的流程分析,让您更安全地将可空的局部变量和参数,转变为可用的非空类型。 它同时还对类型提升、遗漏的返回、不可达的代码以及变量的初始化,有着更为智能的规则。
late修饰符以在运行时每次都进行检查的高昂代价, 让您在一些原本无法使用的地方,能够使用非空类型和final。 它同时提供了对字段延迟初始化的支持。List类现在不再允许包含未初始化的元素。
作者:AlexV525 链接:juejin.cn/post/688410… 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。