JSRUN 用代码说话

库和可见性

编辑教程

库和可见性

创建一个模块化的,可共享的代码库可以用import 和 library 指令。 库不仅提供了 API ,而且对代码起到了封装的作用: 以下划线 (_) 开头的标识符仅在库内可见。,虽然没有使用 library 指令,但每个 Dart 应用程序都是一个库 。

库可以通过包来分发。

使用库

通过 import 在一个库中引用另外一个库的文件 例如,Dart Web应用程序通常使用 dart:html库,它们可以像这样导入:

import 'dart:html';

import 参数只需要一个指向库的 URI。URI 对于内置库拥有自己特殊的dart: 方案。 对于其他的库,使用系统文件路径或者 package: 方案 。 package: 方案指定由包管理器(如 pub 工具)提供的库。例如:

import 'package:test/test.dart';

URI是统一资源标识符。 URL(统一资源定位符)是一种常见的URI。

指定库前缀

导入两个存在冲突标识符的库, 可以为这两个库,或其中一个指定前缀。 如 library1 和 library2 都有一个 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();

导入库的一部分

选择需要导入的内容使用库的一部分功能。例如:

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

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

延迟加载库

让应用在需要的时候再加载库使用Deferred loading (也称 lazy loading) 。 下面是一些使用延迟加载库的场景:

  • 减少 APP 的启动时间。
  • 执行 A/B 测试,例如 尝试各种算法的 不同实现。
  • 加载很少使用的功能,例如可选的屏幕和对话框。

用 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 的命名空间 中。 loadLibrary() 方法返回一个 Future。

Dart VM的区别:Dart VM允许在调用loadLibrary()之前访问延迟库的成员。这种行为可能会改变,所以不要依赖于当前的VM行为

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟