import和liabrary指令可以幫助你創建模塊化,可復用的代碼。庫不僅僅提供API,也是一個私有化單元:庫中已下劃線(_)開頭的類都是對外不可訪問的。每個Dart的應用也是一個包,儘管它沒有使用包的聲明。 庫都採用包的形式發佈。具體看 "Pub Package and Asset Manage ...
import和liabrary指令可以幫助你創建模塊化,可復用的代碼。庫不僅僅提供API,也是一個私有化單元:庫中已下劃線(_)開頭的類都是對外不可訪問的。每個Dart的應用也是一個包,儘管它沒有使用包的聲明。
庫都採用包的形式發佈。具體看 Pub Package and Asset Manager
Using libraries 庫的使用
使用import關鍵字引入庫中的資源。
下麵的例子中,表示了Dart web 應用需要使用dart:html 庫
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;
Lazily loading a library 懶載入
Deferred loading允許應用你在需要時,在後臺載入庫。下麵是需要使用到 deferred的場景
- 減少APP的啟動事件
- 進行A/B 測試,
- 用於載入少用的類,可以節省資源,比如可選的界面和彈出框,
import 'package:greetings/hello.dart' deferred as hello;
當你需要用它時,使用loadLibrary().
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
在上面的代碼中,await 暫停程式執行,直至包載入完。如果想瞭解關於 async 和 await更多信息,請看asynchrony support.
你可以多次調用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之前允許使用庫中的變數,但是這種做法不建議使用,可能後期會改變這種機制