程式庫 & 匯入
import
和 library
指令可以協助您建立模組化且可共享的程式碼庫。程式庫不僅提供 API,也是隱私的單位:以下底線 (_
) 開頭的識別碼僅在程式庫內部可見。每個 Dart 檔案(及其組件)都是一個程式庫,即使它未使用 library
指令。
程式庫可以使用套件來發布。
使用程式庫
#使用 import
指定如何將一個程式庫的命名空間用於另一個程式庫的範圍中。
例如,Dart Web 應用程式通常使用 dart:js_interop
程式庫,它們可以像這樣匯入:
import 'dart:js_interop';
import
唯一需要的引數是指定程式庫的 URI。對於內建程式庫,URI 具有特殊的 dart:
結構。對於其他程式庫,您可以使用檔案系統路徑或 package:
結構。package:
結構指定由套件管理器(例如 pub 工具)提供的程式庫。例如
import 'package:test/test.dart';
指定程式庫前綴
#如果您匯入兩個具有衝突識別碼的程式庫,則可以為其中一個或兩個程式庫指定前綴。例如,如果 library1 和 library2 都有 Element 類別,則您的程式碼可能如下所示:
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;
延遲載入程式庫
#延遲載入(也稱為惰性載入)允許 Web 應用程式在需要時按需載入程式庫。當您想要滿足以下一或多個需求時,請使用延遲載入。
- 縮短 Web 應用程式的初始啟動時間。
- 執行 A/B 測試 — 例如,嘗試演算法的替代實作。
- 載入不常用的功能,例如選用畫面和對話方塊。
這並不表示 Dart 會在啟動時載入所有延遲元件。Web 應用程式可以在需要時透過網路下載延遲元件。
dart
工具不支援針對 Web 以外目標的延遲載入。如果您正在建置 Flutter 應用程式,請參閱 Flutter 指南中關於延遲元件的 Flutter 實作。
若要延遲載入程式庫,請先使用 deferred as
匯入它。
import 'package:greetings/hello.dart' deferred as hello;
當您需要程式庫時,請使用程式庫的識別碼調用 loadLibrary()
。
Future<void> greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
在上述程式碼中,await
關鍵字會暫停執行,直到程式庫載入完成。如需關於 async
和 await
的詳細資訊,請參閱非同步支援。
您可以對程式庫多次調用 loadLibrary()
而不會發生問題。程式庫只會載入一次。
當您使用延遲載入時,請記住以下事項
- 延遲程式庫的常數在匯入檔案中不是常數。請記住,這些常數在延遲程式庫載入之前不存在。
- 您無法在匯入檔案中使用延遲程式庫中的類型。相反地,請考慮將介面類型移至延遲程式庫和匯入檔案都匯入的程式庫。
- Dart 會隱式地將
loadLibrary()
插入您使用deferred as namespace
定義的命名空間中。loadLibrary()
函式會傳回Future
。
library
指令
#若要指定程式庫層級的文件註解或 metadata 註解,請將它們附加到檔案開頭的 library
宣告。
/// A really great test library.
@TestOn('browser')
library;
實作程式庫
#請參閱建立套件,以取得關於如何實作套件的建議,包括
- 如何組織程式庫原始碼。
- 如何使用
export
指令。 - 何時使用
part
指令。 - 如何使用條件式匯入和匯出,以實作支援多個平台的程式庫。
除非另有說明,否則本網站上的文件反映的是 Dart 3.7.1 版本。頁面上次更新時間:2025-01-22。 檢視原始碼 或 回報問題。