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
命名空间 的类中。