库的可见性 3个月前

编程语言
420
库的可见性

指令 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 关键字暂停执行直到这个库加载完成

你可以在一个库上多次调用 loadLibrary() 而不用担心会有问题。这个库只会被加载一次。

当使用延迟加载时记住以下几点:

  • 一个延迟加载库中的常量在导入的文件中的不是常量。记住,这些常量直到库被加载前都是不存在的。
  • 你不能使用延迟加载库中的类型。取而代之地,考虑将接口类型移到另一个库中,而这个库被延迟加载的库和导入的文件导入。
  • Dart 隐式地将 loadLibrary() 插入到你使用 deferred as namespace 定义的命名空间中。函数 loadLibrary() 返回一个 Future

实现库

要获取关于如何实现一个库包的建议,请参阅 创建一个库包,包括:

  • 如果组织库中的源代码。
  • 如果使用 export 指令。
  • 何时使用 part 指令。
  • 何时使用 library 指令。
image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223679
累计阅读

热门教程文档

Typescript
31小节
爬虫
6小节
Linux
51小节
CSS
33小节
Docker
62小节