本系列教程大多翻译自 Dart 官网,因本人英语水平有限,可能有些地方翻译不准确,还请各位大佬斧正。如需转载请标明出处,谢绝 CSDN 爬虫党。
Libraries and visibility(库和可见性)
import
和 library
指令帮助你的代码模块化和共享化。库并不只是提供 API,还能提供私有化单元:以下划线(_
)开始,定义只有在内部才能看见的标识符。
所有的 Dart 应用都是一个库,即使没有使用 library
指令;
库可以被 packages 分发。
使用库(Using libraries)
使用 import
关键字去指定一个库的命名区间,用于区分其他库。
例如,Dart web 应用通常要使用 dart:html 库,你可以这样引入:
import 'dart:html';
import
只需要一个参数,这个参数是指向库的 URI。Dart 内置库,URL 包含特殊的标识dart:
。如果是其他库,你可以使用文件系统路径或 package:
标识。可以用包管理器,比如 pub tool,来管理 package:
标识指定库:
import 'package:test/test.dart';
Note: URI(uniform resource identifier)统一资源定位符。URLs(uniform resource locators)统一资源定位器,是一种常见的 URI。
指定库的前缀(Specifying a library prefix)
如果你引入了两个有命名冲突的库,你可以指定一个或全部库的前缀。例如,如果 libarary1 和 library2 都有相同的 class 元素,那么可以这么写:
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();
只引入库的一部分(Importing only part of a library)
如果你只想使用库的一部分,你可以有选择的引入:
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
库的懒加载(Lazily loading a library)
延迟加载(deferred loading),也叫懒加载,允许 web 应用只有在需要的时候,才加载。下列可能是你需要延迟加载的场景:
- 减少 web 应用启动时间;
- 执行 A/B 测试,比如尝试算法的替代实现;
- 加载很少使用的功能,比如可选屏幕和对话框;
Note:只有 dart2js 支持延迟加载,Flutter,Dart MV 和 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
关键字来暂停程序的执行,直到库被加载完成(和 JavaScript 一样)。更多关于 async
和 await
详情,请移步 asynchrony support。
你可以对一个库多次调用 loadLibrary()
,但这个库只会被加载一次(为了节约资源)。
使用延迟加载时请记住以下事项:
- 在引入文件里,延迟库里的常量并不是常量。记住,这些常量在延迟库加载前都不存在;
- 在引入文件里,你不能使用延迟库里的类型。相反,可以考虑将接口类型移动到延迟库里或引入文件里;
- Dart 在你使用
deferred as namespace
时命名空间里隐式插入了loadLibrary()
,loadLibrary()
方法返回 Future;
实现库(Implementing libraries)
可以浏览 Create Library Packages 来学习如何实现一个库,包括:
- 如何管理库的资源代码;
- 如何使用
export
命令; - 何时使用
part
命令; - 何时使用
library
命令;
系列文章:
Dart 简明教程 - 01 - Concepts & Variables
Dart 简明教程 - 02 - Functions
Dart 简明教程 - 03 - Operators
Dart 简明教程 - 04 - Control flow statements
Dart 简明教程 - 05 - Exceptions
Dart 简明教程 - 06 - Classes
Dart 简明教程 - 07 - Generics
Dart 简明教程 - 08 - Libraries and visibility
Dart 简明教程 - 09 - Asynchrony support
Dart 简明教程 - 10 - Generators & Isolates & Typedefs & Metadata...