文章

Dart语言详解

使用库

用于import指定一个库的命名空间如何在另一个库的范围内使用。

例如,Dart Web 应用程序通常使用dart:html库,可以像这样导入:

1
import 'dart:html';

唯一必需的参数import是指定库的 URI。对于内置库,URI 具有特殊dart:方案。对于其他库,您可以使用文件系统路径或package: 方案。该package:方案指定由包管理器(例如 pub 工具)提供的库。例如:

1
import 'package:test/test.dart';

URI 代表统一资源标识符。URL(统一资源定位器) 是一种常见的 URI。

指定库前缀

如果您导入两个具有冲突标识符的库,则可以为其中一个或两个库指定前缀。例如,如果 library1 和 library2 都有一个 Element 类,那么您可能会有如下代码:

1
2
3
4
5
6
7
8
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// Uses Element from lib1.
Element element1 = Element();

// Uses Element from lib2.
lib2.Element element2 = lib2.Element();

仅导入库的一部分

如果只想使用库的一部分,则可以选择性地导入该库。例如:

1
2
3
4
5
// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

延迟加载库

延迟加载(也称为 惰性加载 )允许 Web 应用在需要库时按需加载库。当您想要满足以下一个或多个需求时,请使用延迟加载。

  • 减少 Web 应用程序的初始启动时间。
  • 执行 A/B 测试——例如,尝试算法的替代实现。
  • 加载很少使用的功能,例如可选的屏幕和对话框。

这并不意味着 Dart 在启动时会加载所有延迟组件。Web 应用可以在需要时通过 Web 下载延迟组件。

dart工具不支持 Web 以外目标的延迟加载。如果您正在构建 Flutter 应用,请参阅 Flutter 指南中的 延迟组件部分,了解其延迟加载的实现。

要延迟加载库,首先使用 导入它deferred as

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

当您需要该库时, loadLibrary()使用该库的标识符进行调用。

1
2
3
4
Future<void> greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

在上述代码中,await关键字暂停执行,直到库加载完成。 您可以loadLibrary()多次调用一个库而不会出现问题。该库仅加载一次。

使用延迟加载时请注意以下几点:

  • 延迟库的常量不是导入文件中的常量。请记住,这些常量在延迟库加载之前不存在。
  • 您不能在导入文件中使用延迟库中的类型。相反,请考虑将接口类型移至延迟库和导入文件都导入的库中。
  • Dart 隐式地​​插入loadLibrary()到您使用deferred as _namespace_定义的命名空间中。loadLibrary()返回一个Future

library 指令

要指定库级文档注释或元数据注释,请将它们附加到library文件开头的声明中。

1
2
3
/// A really great test library.
@TestOn('browser')
library;

实现库

请参阅 创建包 以获取有关如何实现包的建议,其中包括:

  • 如何组织库源代码。
  • 如何使用该export指令。
  • 何时使用该part指令。
  • 如何使用条件导入和导出来实现支持多平台的库。
本文由作者按照 CC BY 4.0 进行授权