import和liabrary指令能够帮助你建立模块化,可复用的代码。库不单单提供API,也是一个私有化单元:库中已下划线(_)开头的类都是对外不可访问的。每一个Dart的应用也是一个包,尽管它没有使用包的声明。html
库都采用包的形式发布。具体看 Pub Package and Asset Managerweb
使用import关键字引入库中的资源。async
下面的例子中,表示了Dart web 应用须要使用dart:html 库ide
import 'dart:html';
在Dart的内置库中,你能够直接使用dart:schema来引入。其它的库,你可使用文件路径或者package:scheme方式。其中package:scheme使用的包发布工具发布的代码。
import 'package:test/test.dart';
注意:URI是统一资源标识,URL是URI的一种,
模块化
Specifying a library prefix 指定库使用前缀工具
若是你导入两个库,它们有相同的类,你可使用其中一个库增长前缀使用标识.·测试
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(); Importing only part of a library If you want to use only part of a library, you can selectively import the library. For example: // Import only foo. import 'package:lib1/lib1.dart' show foo; // Import all names EXCEPT foo. import 'package:lib2/lib2.dart' hide foo;
Deferred loading容许应用你在须要时,在后台加载库。下面是须要使用到 deferred的场景ui
import 'package:greetings/hello.dart' deferred as hello;
当你须要用它时,使用loadLibrary().spa
Future greet() async { await hello.loadLibrary(); hello.printGreeting(); }
在上面的代码中,await 暂停程序执行,直至包加载完。若是想了解关于 async 和 await更多信息,请看asynchrony support.code
你能够屡次调用loadLibrary,可是库只会让你加载一次。
以下是deferred使用的一些原则:
不可以使用经过deferred导入库的常量,由于它只有在loadLiabary后才建立
不可以使用经过deferred导入库的类,能够将类定义为接口经过import导入,具体实现经过deferred导入
Dart implicitly inserts loadLibrary() into the namespace that you define using deferred as namespace. The loadLibrary() function returns a Future.(没看太懂,和理解的有冲突)
DartVM 不一样:DartVM在loadLibrary以前容许使用库中的变量,可是这种作法不建议使用,可能后期会改变这种机制