Library的导入
import
关键字导入Library
import 'dart:html';
Library的URI
通过URI导入一个Library
根据library的种类不同,URI前缀scheme不同:
- Dart标准库…
dart:xxx
- 三方库(通过包管理器提供的库,如pub工具)…
package:xxx
- Flutter的Library中也有三方库
import 'package:test'
- Native实现库…
dart-ext: xxx
本地工程的源码还没有package化的,可添加相对路径源码依赖
import 'package:test/text.dart'
别名导入
与Kotlin的import相同
import "package:mylib/awesome_functions.dart" as awesome;
部分导入
当只想导入部分功能时
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
懒加载库
库的懒加载(或者延迟加载),Java没有类似功能,可以类比Andoird中so的load。
懒加载适用于以下场景。
- 减少应用程序的初始启动时间
- 进行A/B测试时,可以根据需求加载不同的库
- 加载某些使用频次低的功能,懒加载可以提高性能,例如对话框等
延迟加载需要使用deferred as
关键字导入
import "package:rarely_used/lib.dart" deferred as rare;
当真正需要加在时,通过loadLibrary()
加载,返回一个Future
,所以必须使用await
同步。
Future doSomething() async {
await rare.loadLibrary();
rare.awesomeFunction();
}
使用懒加载有几个注意事项:
- 懒加载库中的const定义的常量,不能当常量使用,因为有可能还没有加载
- 相同的理由,不要使用懒加载库中的Class进行任何操作。可以让懒加载库作为某些公共接口的实现,通过接口的依赖倒置避免对懒加载库中Class的直接依赖
deferred as (namespace)
中的namespace
会被自动插入Future loadLibrary()
以作为执行加载的载体,所以注意避免在Library中出现同样签名的LoadLibrary()
方法
Library的创建
创建一个Library供外部使用。
需要创建pubspec.yaml
并进行若干配置。具体可以参考Create Library Packages,包括:
- 库的代码组织
export
指令的使用part
指令的使用library
指令的使用
Flutter工程中代码也是放在lib/
文件夹中,所以也可以看作是是一个Dart的Library。