Dart tour: 13、使用库
本篇代码无法直接运行,仅展示语法。
库和可见性#
在 Dart 中与创建于依赖库的主要依赖于 import 和 library 这两个关键字。
每个 Dart 程序都是一个库,即便没有使用关键字 library 指定。以下划线(_)开头的成员仅在代码库中可见。
如果需要发布和部署库,可以参考 这篇文档。
为何
Dart使用下划线而不使用public或private作为可访问性关键字的原因,可以查看 SDK issue 33383
根据回复来看,原因是当使用
dynamic等动态类型时,检测其成员的可访问性会增加大量的开销。而通过这种下划线语法,可以很好的做到检测成员是否是私有的。
使用库#
使用 import 来指定代码库的 URI, 以便可以访问其它库。
对于内置的库,使用 dart:xxxxxx 的形式。
而对于其它的库,可以使用一个文件系统路径或者以 package:xxxxxx 的形式。
指定库前缀#
如果导入的两个代码库有冲突的标识符,可以为其中一个指定前缀。
导入库的一部分#
如果只想使用代码库中的一部分,可以有选择地导入代码库。
延迟加载库#
目前只有
dart2js支持延迟加载,Flutter、Dart VM以及DartDevc目前都不支持延迟加载。可以查阅 issue #33118 和 issue #27776 获取更多的相关信息。
延迟加载(也常称为懒加载)允许应用在需要时再去加载代码库,下面是可能使用到延迟加载的场景:
- 为了减少应用的初始化时间。
- 处理 A/B 测试,比如测试各种算法的不同实现。
- 加载很少会使用到的功能,比如可选的屏幕和对话框。
使用 deferred as 关键字来标识需要延时加载的代码库。当实际需要使用到库中 API 时先调用 loadLibrary 函数加载库。loadLibrary 函数可以调用多次也没关系,代码库只会被加载一次。
在使用延迟加载的时候需要牢记以下几点:
- 延迟加载的代码库中的常量需要在代码库被加载的时候才会导入,未加载时是不会导入的。
- 不能在导入文件中使用延迟库中的类型, 需如要请考虑将接口类型迁移到正常导入的文件中。
- Dart 会隐式地将
loadLibrary()导入到使用了deferred as命名空间 的类中。