库和可见性
指令 import 和 library 可以帮你创建一个模块化和可共享的代码库。库不仅提供 API,也是一个隐私单位:以下划线 (_) 开头的标识符只在库中可见。”每个 Dart 应用都是一个库“,即使它没有使用 library 指令。
库可以通过 包 来发布。
使用库
使用 import 指令来指定一个库在其他库的作用域内如何被使用。
比如,Dart 网页应用通常使用 dart:html 库,它可以像这样被引入:
import 'dart:html';
指令 import 唯一需要的参数是指定了这个库的 URI。对于内置库,URI 有特殊的 dart: 格式。对于其他更多的库,你可以使用一个文件系统路径或者 package: 格式。package: 格式指定由包管理器比如 pub 工具提供的库。比如:
import 'package:test/test.dart';
说明:URI 指统一资源标识符。URL (统一资源定位符)是一种常见的 URI。
指定库前缀
如果你导入两个有标识符冲突的库,那么你可以为其中一个或两个指定前缀。比如,如果库1和库2都有一个 Element 类,那么你的代码可能是这样的:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// 使用 lib1 的 Element
Element element1 = Element();
// 使用 lib2 的 Element
lib2.Element element2 = lib2.Element();
只导入一个库的部分
如果你只想要使用一个库的部分,你可以选择性地导入库。比如:
// 只导入 foo
import 'package:lib1/lib1.dart' show foo;
// 导入除 foo 之外的所有名称
import 'package:lib2/lib2.dart' hide foo;
懒加载一个库
”延迟加载“(也称为”懒加载“)允许一个 web 应用按需加载一个库,仅当这个库被需要时。下面是一些你可能会使用延迟加载的情况:
- 为了减少 web 应用的初始启动时间。
- 为了执行 A/B 测试——尝试一个算法的替代实现。
- 为了加载很少使用的功能,比如可选的页面和对话框。
说明:仅 dart2js 支持懒加载。Fultter 和 Dart VM,还有 dartdevc 不支持懒加载。要了解更多信息,请参阅 issue #33118 和 issue #27776。
要懒加载一个库,你必须先使用 deferred as 导入它:
import 'package:greetings/hello.dart' deferred as hello;
当你需要这个库时,使用这个库的标识符调用 loadLibrary() 。
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
在上面的代码中,await 关键字暂停执行直到这个库加载完成。要了解更多关于 async 和 await 的信息,请参阅 Future。