flutter【9】dart语言--库和可见性

库和可见性

  • 每个 Dart app 都是一个库, 即使没有使用 library 命令也是一个库。
  • 使用 import 和 library 指令可以创建模块化的可分享的代码。
  • 库不仅仅提供 API, 还是一个私有单元:以下划线 (_) 开头的标识符只有在库内部可见。
  • 库可以使用 Dart package 工具部署。参考Pub Package 和 Asset Manager

使用库

  • dart:库的uri/内置库的scheme
  • 其他库使用文件系统路径或者package:scheme(package: scheme 指定的库通过包管理器来提供, 例如 pub 工具。)
//web应用通常使用 dart:html 库,内置库
import 'dart:html';

//包管理器提供的库
import 'package:mylib/mylib.dart';
import 'package:utils/utils.dart';

指定库前缀

如果导入的两个库具有冲突的标识符, 则可以使用库的前缀来区分。

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
Element element1 = new Element();           // Uses Element from lib1.
lib2.Element element2 = new lib2.Element(); // Uses Element from lib2.

导入库的一部分

如果只使用库的一部分功能,则可以选择需要导入的内容。

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

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

库的延迟加载

  • 减少 APP 的启动时间。
  • 执行 A/B 测试,例如 尝试各种算法的不同实现。
  • 加载很少使用的功能,例如可选的屏幕和对话框。
//先使用 deferred as 关键字导入
import 'package:deferred/hello.dart' deferred as hello;

//使用时,使用 loadLibrary() 方法来加载库
greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

可以针对同一个库多次调用loadLibrary() 方法,但是库只会加载一次。

使用 await 关键字暂停代码执行一直到库加载完成。关于 async 和 await 的更多信息请参考异步支持。

需要注意

  • 延迟加载库的常量在导入的时候是不可用的。 只有当库加载完毕的时候,库中常量才可以使用。
  • 在导入文件的时候无法使用延迟库中的类型。如果你需要使用类型,则考虑把接口类型移动到另外一个库中,让两个库都分别导入这个接口库。
  • Dart 隐含的把 loadLibrary() 函数导入到使用 deferred as 的命名空间中。 loadLibrary() 方法返回一个 Future。

实现库

参考创建库

你可能感兴趣的:(flutter【9】dart语言--库和可见性)