美文网首页
Dart Libraries and visibility(库和

Dart Libraries and visibility(库和

作者: KtYY | 来源:发表于2019-01-22 13:54 被阅读0次

    使用 importlibrary 指令可以帮助你创建 模块化的可分享的代码。库不仅仅提供 API, 还是一个私有单元:以下划线 (_) 开头的标识符只有在库 内部可见。每个 Dart app 都是一个库, 即使没有使用 library 命令也是一个库。

    库可以使用 Dart package 工具部署。参考 Pub Package 和 Asset Manager 来获取关于 pub(Dart 的包管理工具) 的更多信息。

    Using libraries(使用库)

    使用 import 来指定一个库如何使用另外 一个库。

    例如, Dart web 应用通常使用 dart:html 库,然后可以这样导入库:

    <pre class="prettyprint lang-dart prettyprinted" style="">import 'dart:html';</pre>

    import 必须参数为库 的 URI。 对于内置的库,URI 使用特殊的 dart: scheme。 对于其他的库,你可以使用文件系统路径或者 package: scheme。 package: scheme 指定的库通过包管理器来提供, 例如 pub 工具。

    <pre class="prettyprint lang-dart prettyprinted" style="">import 'dart:io'; import 'package:mylib/mylib.dart'; import 'package:utils/utils.dart';</pre>

    注意: URI 代表 uniform resource identifier。 URLs (uniform resource locators) 是一种常见的 URI。

    Specifying a library prefix(指定库前缀)

    如果你导入的两个库具有冲突的标识符, 则你可以使用库的前缀来区分。 例如,如果 library1 和 library2 都有一个名字为 Element 的类, 你可以这样使用:

    <pre class="prettyprint lang-dart prettyprinted" style="">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.</pre>

    Importing only part of a library(导入库的一部分)

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

    <pre class="prettyprint lang-dart prettyprinted" style="">// Import only foo. import 'package:lib1/lib1.dart' show foo; // Import all names EXCEPT foo. import 'package:lib2/lib2.dart' hide foo;</pre>

    Lazily loading a library(延迟载入库)

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

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

    要延迟加载一个库,需要先使用 deferred as 来 导入:

    <pre class="prettyprint lang-dart prettyprinted" style="">import 'package:deferred/hello.dart' deferred as hello;</pre>

    当需要使用的时候,使用库标识符调用 loadLibrary() 函数来加载库:

    <pre class="prettyprint lang-dart prettyprinted" style="">greet() async { await hello.loadLibrary(); hello.printGreeting(); }</pre>

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

    在一个库上你可以多次调用 loadLibrary() 函数。 但是该库只是载入一次。

    使用延迟加载库的时候,请注意一下问题:

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

    Implementing libraries(实现库)

    参考 创建库 来了解如何创建一个库并发布。

    摘录:http://dart.goodev.org/guides/language/language-tour#libraries-and-visibility%E5%BA%93%E5%92%8C%E5%8F%AF%E8%A7%81%E6%80%A7

    相关文章

      网友评论

          本文标题:Dart Libraries and visibility(库和

          本文链接:https://www.haomeiwen.com/subject/bfmljqtx.html