ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] import和library指令可以帮助您创建模块化和可共享的代码库。库不仅提供api,而且包含隐私部分:以下划线(_)开头的标识符仅在库中可见。每个Dart应用程序都是一个库,即使它不使用库指令。 可以使用包来分发库。有关Pub Package和Asset Manager的信息,请参见[Pub Package和Asset Manager], Pub是SDK中包含的包管理器。 ## 使用库 使用import来指定如何在另一个库的范围中使用来自一个库的命名空间。 例如,Dart web应用程序通常使用Dart:html库,它们可以这样导入: ~~~ import 'dart:html'; ~~~ 导入一个库仅仅需要提供库的URI。对于内置库,URI具有特定的形式(dart:scheme)。对于其他库,可以使用文件路径或者包:scheme的形式。包:scheme形式指定包管理器(如pub工具)提供的库。例如: ~~~ import 'package:test/test.dart'; ~~~ >注意:URI表示统一资源标识符。url(统一资源定位器)是一种常见的URI。 > ## 指定一个库前缀 如果您导入两个具有冲突标识符的库,那么您可以为一个或两个库指定一个前缀。例如,如果library1和library2都有一个Element类,那么你可以用以下的方法: ~~~ import 'package:lib1/lib1.dart'; import 'package:lib2/lib2.dart' as lib2; // Uses Element from lib1. Element element1 = Element(); // Uses Element from lib2. 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; ~~~ ## 懒加载库 延迟加载(也称为懒加载)允许应用程序在需要时按需加载库。以下是一些您可能使用延迟加载的情况: * 减少应用程序的初始启动时间。 * 例如,要执行A/B测试——尝试算法的其他实现。 * 加载很少使用的功能,如可选屏幕和对话框。 要延迟加载库,必须首先使用deferred as进行导入。 ~~~ import 'package:greetings/hello.dart' deferred as hello; ~~~ 当您需要库时,使用库的标识符调用loadLibrary()。 ~~~ Future greet() async { await hello.loadLibrary(); hello.printGreeting(); } ~~~ 在前面的代码中,wait关键字暂停执行,直到加载库。有关async和waiting的更多信息,请参见[异步支持]。 您可以在库上多次调用loadLibrary(),没有问题。该库只加载一次。 在使用延迟加载时,请记住以下几点: * 在导入文件中,递延库的常量不是常量。记住,这些常量在延迟库加载之前是不存在的。 * 您不能在导入文件中使用来自延迟库的类型。相反,考虑将接口类型移动到由延迟库和导入文件导入的库。 * Dart隐式地将loadLibrary()插入到您定义使用deferred作为名称空间的名称空间中。函数的作用是:返回一个未来。 >Dart VM差异:由于问题#33118,Dart VM甚至在调用loadLibrary()之前就允许访问递延库的成员。我们希望这个bug能够很快得到修复,所以不要依赖于当前的VM行为。 > ## 库的实现 有关如何实现库包的建议,请参阅[创建库包],包括: * 如何组织库的代码。 * 如何使用export指令。 * 何时使用part指令。