做者 | 弗拉德
來源 | 弗拉德(公衆號:fulade_me)html
import
關鍵字能夠幫助你建立一個模塊化和可共享的代碼庫,代碼庫不只只是提供 API 並且還起到了封裝的做用:如下劃線(_)開頭的成員僅在代碼庫中可見。算法
使用import
來指定命名空間以便其它庫能夠訪問。好比你能夠導入代碼庫 dart:html
來使用Dart Web
中相關 API:異步
import 'dart:html';
import
的惟一參數是用於指定代碼庫的URI
,對於Dart
內置的庫,使用 dart:xxxxxx
的形式。而對於其它的庫,你可使用一個文件系統路徑或者以 package:xxxxxx
的形式。package:xxxxxx
指定的庫經過包管理器(好比 pub 工具)來提供:async
import 'package:test/test.dart';
若是你導入的兩個代碼庫有衝突的標識符,你能夠爲其中一個指定前綴。好比若是 library1
和library2
都有Element
類,那麼能夠這麼處理:ide
import 'package:lib1/lib1.dart'; import 'package:lib2/lib2.dart' as lib2; // 使用 lib1 的 Element 類。 Element element1 = Element(); // 使用 lib2 的 Element 類。 lib2.Element element2 = lib2.Element();
若是你只想使用代碼庫中的一部分,你能夠有選擇地導入代碼庫。例如:模塊化
// 只導入 lib1 中的 foo。(Import only foo). import 'package:lib1/lib1.dart' show foo; // 導入 lib2 中除了 foo 外的全部。 import 'package:lib2/lib2.dart' hide foo;
延遲加載(也常稱爲懶加載)容許應用在須要時再去加載代碼庫,下面是可能使用到延遲加載的場景:函數
爲了減小應用的初始化時間。工具
處理 A/B 測試,好比測試各類算法的不一樣實現。測試
使用deferred as
關鍵字來標識須要延時加載的代碼庫:code
import 'package:greetings/hello.dart' deferred as hello;
當實際須要使用到庫中API時先調用loadLibrary
函數加載庫:
Future greet() async { await hello.loadLibrary(); hello.printGreeting(); }
在前面的代碼,使用 await 關鍵字暫停代碼執行直到庫加載完成。更多關於 async 和 await 的信息請參考異步支持。loadLibrary
函數能夠調用屢次也不要緊,代碼庫只會被加載一次。
當你使用延遲加載的時候須要牢記如下幾點:
Dart
會隱式地將loadLibrary
方法導入到使用了deferred as
命名空間 的類中。loadLibrary
函數返回的是一個Future
。