99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

庫(kù)和可見(jiàn)性

2020-02-03 23:42 更新

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

庫(kù)可以通過(guò)包來(lái)分發(fā)。有關(guān) pub(集成在SDK中的包管理器)的信息,請(qǐng)參考 Pub Package 和 Asset Manager。


使用庫(kù)

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

import 'dart:html';

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

import 'package:test/test.dart';

提示: URI 代表統(tǒng)一資源標(biāo)識(shí)符。 URL(統(tǒng)一資源定位符)是一種常見(jiàn)的URI。

指定庫(kù)前綴

如果導(dǎo)入兩個(gè)存在沖突標(biāo)識(shí)符的庫(kù), 則可以為這兩個(gè)庫(kù),或者其中一個(gè)指定前綴。 例如,如果 library1 和 library2 都有一個(gè) Element 類(lèi), 那么可以通過(guò)下面的方式處理:

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

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

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

導(dǎo)入庫(kù)的一部分

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

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

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

延遲加載庫(kù)

Deferred loading (也稱之為 lazy loading) 可以讓?xiě)?yīng)用在需要的時(shí)候再加載庫(kù)。 下面是一些使用延遲加載庫(kù)的場(chǎng)景:

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

要延遲加載一個(gè)庫(kù),需要先使用 deferred as 來(lái)導(dǎo)入:

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

當(dāng)需要使用的時(shí)候,使用庫(kù)標(biāo)識(shí)符調(diào)用 loadLibrary() 函數(shù)來(lái)加載庫(kù):

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

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

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

使用延遲加載庫(kù)的時(shí)候,請(qǐng)注意一下問(wèn)題:

  • 延遲加載庫(kù)的常量在導(dǎo)入的時(shí)候是不可用的。 只有當(dāng)庫(kù)加載完畢的時(shí)候,庫(kù)中常量才可以使用。
  • 在導(dǎo)入文件的時(shí)候無(wú)法使用延遲庫(kù)中的類(lèi)型。 如果你需要使用類(lèi)型,則考慮把接口類(lèi)型移動(dòng)到另外一個(gè)庫(kù)中, 讓兩個(gè)庫(kù)都分別導(dǎo)入這個(gè)接口庫(kù)。
  • Dart 隱含的把 loadLibrary() 函數(shù)導(dǎo)入到使用 deferred as 的命名空間 中。 loadLibrary() 方法返回一個(gè) 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.


實(shí)現(xiàn)庫(kù)

有關(guān)如何實(shí)現(xiàn)庫(kù)包的建議,請(qǐng)參考 Create Library Packages 這里面包括:

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)