import
和library
指令可以幫你創(chuàng)建模塊化和可共享的代碼。庫不僅提供API,也可以有私有化的元素偎箫。使用下劃線開始的標識符只在庫中可見创千。每個dart app都是一個庫缰雇,即使沒有使用library
指令。
庫可以使用package進行分發(fā)追驴。參考Pub Package and Asset Manager械哟。
使用庫
使用import
關鍵字來指定其他庫:
import 'dart:html';
對于內置庫,要使用dart:
scheme殿雪,對于其他庫要使用package:
scheme暇咆。例如:
import 'package:test/test.dart';
指定庫前綴
如果你的兩個庫里面有相同的標識符,那么可以使用as
來指定命名空間丙曙。類似C++的namespace
糯崎。
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;
懶加載一個庫
延遲加載(也叫懶加載)是指一個應用可以按需加載一個庫河泳。下面是你可能使用它的一些情景:
- 減少app的啟動時間
- 執(zhí)行A/B測試沃呢,例如替代算法實現(xiàn)
- 加載很少使用的方法,例如一些可選的界面和彈窗
要想懶加載一個庫拆挥,你必須使用deferred as
import 'package:greetings/hello.dart' deferred as hello;
當你需要使用這個庫的時候薄霜,你需要使用庫標識符調用loadLibrary()
方法:
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
你可以多次調用loadLibrary()
,懶加載只會加載一次纸兔,后續(xù)的加載都會使用緩存中的內容惰瓜,而不是再次加載。
使用延遲加載時需要記住以下幾點:
- 一個延遲庫的常量也不存在汉矿,直到這個庫被加載
- 你不能使用一個導入延遲庫的dart文件中導入的延遲庫里面的類型崎坊。取而代之的是你可以在導入延遲庫的dart文件中公開一個導入方法的接口
- Dart隱式地添加了
loadLibrary()
方法到deferred as
命名空間,這個方法返回了一個Future
洲拇。
Dart VM有時候會允許你在調用
loadLibrary()
之前訪問延遲庫的變量奈揍。但不要依賴這種特性,很可能在后續(xù)版本里面就會被改掉赋续。
實現(xiàn)一個庫
參考Create Library Packages男翰,它包含了:
- 如何組織庫代碼
- 如何使用
export
指令 - 何時使用
part
指令 - 何時使用
library
指令