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以前容許使用庫中的變量,可是這種作法不建議使用,可能後期會改變這種機制