庫和可見性

2020-02-03 23:42 更新

import 和 library 指令可以用來創(chuàng)建一個模塊化的,可共享的代碼庫。 庫不僅提供了 API ,而且對代碼起到了封裝的作用: 以下劃線 (_) 開頭的標識符僅在庫內(nèi)可見。 每個 Dart 應用程序都是一個庫 ,雖然沒有使用 library 指令。

庫可以通過包來分發(fā)。有關 pub(集成在SDK中的包管理器)的信息,請參考 Pub Package 和 Asset Manager。


使用庫

通過 import 指定一個庫命名空間中的內(nèi)如如何在另一個庫中使用。 例如,Dart Web應用程序通常使用 dart:html庫,它們可以像這樣導入:

import 'dart:html';

import 參數(shù)只需要一個指向庫的 URI。 對于內(nèi)置庫,URI 擁有自己特殊的dart: 方案。 對于其他的庫,使用系統(tǒng)文件路徑或者 package: 方案 。 package: 方案指定由包管理器(如 pub 工具)提供的庫。例如:

import 'package:test/test.dart';

提示: URI 代表統(tǒng)一資源標識符。 URL(統(tǒng)一資源定位符)是一種常見的URI。

指定庫前綴

如果導入兩個存在沖突標識符的庫, 則可以為這兩個庫,或者其中一個指定前綴。 例如,如果 library1 和 library2 都有一個 Element 類, 那么可以通過下面的方式處理:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// 使用 lib1 中的 Element。
Element element1 = Element();

// 使用 lib2 中的 Element。
lib2.Element element2 = lib2.Element();

導入庫的一部分

如果你只使用庫的一部分功能,則可以選擇需要導入的 內(nèi)容。例如:

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

延遲加載庫

Deferred loading (也稱之為 lazy loading) 可以讓應用在需要的時候再加載庫。 下面是一些使用延遲加載庫的場景:

  • 減少 APP 的啟動時間。
  • 執(zhí)行 A/B 測試,例如 嘗試各種算法的 不同實現(xiàn)。
  • 加載很少使用的功能,例如可選的屏幕和對話框。

要延遲加載一個庫,需要先使用 deferred as 來導入:

import 'package:greetings/hello.dart' deferred as hello;

當需要使用的時候,使用庫標識符調(diào)用 loadLibrary() 函數(shù)來加載庫:

Future greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

在前面的代碼,使用 await 關鍵字暫停代碼執(zhí)行一直到庫加載完成。 關于 async 和 await 的更多信息請參考 異步支持。

在一個庫上你可以多次調(diào)用 loadLibrary() 函數(shù)。但是該庫只是載入一次。

使用延遲加載庫的時候,請注意一下問題:

  • 延遲加載庫的常量在導入的時候是不可用的。 只有當庫加載完畢的時候,庫中常量才可以使用。
  • 在導入文件的時候無法使用延遲庫中的類型。 如果你需要使用類型,則考慮把接口類型移動到另外一個庫中, 讓兩個庫都分別導入這個接口庫。
  • Dart 隱含的把 loadLibrary() 函數(shù)導入到使用 deferred as 的命名空間 中。 loadLibrary() 方法返回一個 Future。

Dart VM difference: The Dart VM allows access to members of deferred libraries even before the call to loadLibrary(). This behavior might change, so don’t depend on the current VM behavior. For details, see issue #33118.


實現(xiàn)庫

有關如何實現(xiàn)庫包的建議,請參考 Create Library Packages 這里面包括:

  • 如何組織庫的源文件。
  • 如何使用 export 命令。
  • 何時使用 part 命令。
  • 何時使用 library 命令。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號