在Dart中,可以使用import
和library
创建模块化的可分享代码。Dart库具有如下一些基本概念:
- 在库里面,以
_
开头的标识符仅在库内部可见 - 每个
Dart
程序都是一个库,即使没有使用library
命名,也是一个库 - 库可以使用
Dart package
工具部署
一、库的使用
可以使用import
来指定一个库该如何使用另一个库,如:
import 'dart:html';
其中:
import
必须传入参数,参数为库的URI
- 对于内置的库,使用
dart:
开头作为库的URI
,如dart:io
- 对于其他的库,可以使用文件系统路径,或者使用
package:
开头的方式作为库的URI
二、库的前缀
现在,假设有两个库,他们内部含有同样的标识符,那么这种情况下可以使用import ... as ...
语法,如下:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
Element element1 = new Element();
lib2.Element element2 = new lib2.Element();
三、部分导入
如果只使用库的一部分功能,可以使用部分导入,如下:
// 只导入foo
import 'package:lib1/lib1.dart' show foo;
// 导入全部(除了foo)
import 'package:lib2/lib2.dart' hide foo;
四、延迟导入
延迟导入可以实现在应用需要的时候再加载,一般有这些场景:
- 减少APP的启动时间
- 执行A/B测试,如尝试各种算法的不同实现
- 加载很少使用的功能
延迟导入的语法是import ... deferred as ...
,使用时则使用loadLibrary()
来加载库,例子如下:
import 'package:deferred/hello.dart' deferred as hello;
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
需要注意的是:
- 延迟加载库的常量在导入时是不可用的,只有当库加载完毕时,库中的常量才可用
- 导入延迟库的时候,库中的
类型
是无法使用的 Dart
隐含地把id.loadLibrary()
的结果赋值给deferred as id
中的id