库与导入
import
和 library
指令可以帮助您创建模块化且可共享的代码库。库不仅提供 API,而且还是隐私单元:以下划线 (_
) 开头的标识符仅在库内可见。每个 Dart 文件(及其部分)都是一个 库,即使它不使用 library
指令。
库可以使用 包 进行分发。
使用库
#使用 import
指定一个库的命名空间如何在另一个库的范围内使用。
例如,Dart Web 应用通常使用 dart:html 库,它们可以这样导入:
import 'dart:html';
import
唯一必需的参数是指定库的 URI。 对于内置库,URI 具有特殊的 dart:
模式。 对于其他库,您可以使用文件系统路径或 package:
模式。 package:
模式指定由包管理器(例如 pub 工具)提供的库。例如:
import 'package:test/test.dart';
指定库前缀
#如果您导入了两个具有冲突标识符的库,则可以为一个或两个库指定前缀。例如,如果库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 测试——例如,尝试算法的替代实现。
- 加载很少使用的功能,例如可选屏幕和对话框。
这并不意味着 Dart 会在启动时加载所有延迟组件。 Web 应用可以在需要时通过 Web 下载延迟组件。
dart
工具不支持针对 Web 以外的目标的延迟加载。 如果您正在构建 Flutter 应用, 请参阅 Flutter 指南中关于 延迟组件 的延迟加载实现。
要延迟加载库,首先使用 deferred as
导入它。
import 'package:greetings/hello.dart' deferred as hello;
当您需要该库时,使用库的标识符调用 loadLibrary()
。
Future<void> greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
在前面的代码中, await
关键字会暂停执行,直到库加载完毕。 有关 async
和 await
的更多信息, 请参见 异步支持 。
您可以多次在库上调用 loadLibrary()
而不出现问题。 库只加载一次。
使用延迟加载时,请记住以下几点:
- 延迟库的常量在导入文件中不是常量。 请记住,这些常量在延迟库加载之前不存在。
- 您不能在导入文件中使用延迟库中的类型。 相反,请考虑将接口类型移动到由延迟库和导入文件同时导入的库。
- Dart 会隐式地将
loadLibrary()
插入到您使用deferred as 命名空间
定义的命名空间中。loadLibrary()
函数返回一个Future
。
library
指令
#要指定库级 文档注释 或 元数据注释 , 请将它们附加到文件开头的 library
声明。
/// 一个非常棒的测试库。
@TestOn('browser')
library;
实现库
#有关如何实现包的建议,请参阅 创建包 ,其中包括:
- 如何组织库源代码。
- 如何使用
export
指令。 - 何时使用
part
指令。 - 如何使用条件导入和导出来实现支持多个平台的库。
除非另有说明,否则本网站上的文档反映的是 Dart 3.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.