目录

库和可见性

优质
小牛编辑
133浏览
2023-12-01

指令 importlibrary 可以帮你创建一个模块化和可共享的代码库。库不仅提供 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 #33118issue #27776

要懒加载一个库,你必须先使用 deferred as 导入它:

import 'package:greetings/hello.dart' deferred as hello;

当你需要这个库时,使用这个库的标识符调用 loadLibrary()

Future greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

在上面的代码中,await 关键字暂停执行直到这个库加载完成。要了解更多关于 asyncawait 的信息,请参阅 Future。