Dart -- 庫

  1. import,part,library指令可以幫助創(chuàng)建一個模塊化的蒲犬,可共享的代碼庫困食。庫不僅提供了API蛇尚,還提供隱私單元:以下劃線_開頭的標識符只對內部庫可見。每個Dartapp就是一個庫弛车,即使它不使用庫指令。
  1. 庫可以分布式使用包蒲每。
  1. 使用庫
  • 使用 import 來指定如何從一個庫命名空間用于其他庫的范圍纷跛。

  • 唯一需要 import 的參數(shù)是一個指向庫的 URI。對于內置庫邀杏,URI中具有特殊dart:scheme贫奠。對于其他庫,你可以使用文件系統(tǒng)路徑或package:scheme望蜡。包 package:scheme specifies libraries唤崭,如pub工具提供的軟件包管理器庫。例如:

    import 'dart:io';
    import 'package:mylib/mylib.dart';
    import 'package:utils/utils.dart';
    
  1. 指定庫前綴
  • 如果導入兩個庫是有沖突的標識符脖律,那么你可以指定一個或兩個庫的前綴谢肾。例如,如果 library1 和 library2 都有一個元素類小泉,那么你可能有這樣的代碼:

    import 'package:lib1/lib1.dart';
    import 'package:lib2/lib2.dart' as lib2;
    // ...
    var element1 = new Element(); // 使用lib1里的元素
    var element2 =
    new lib2.Element();  // 使用lib2里的元素
    
  1. 導入部分庫
  • 如果想使用的庫一部分勒叠,你可以選擇性導入庫。例如:
    // 只導入foo庫
    import 'package:lib1/lib1.dart' show foo;
    
    //導入所有除了foo
    import 'package:lib2/lib2.dart' hide foo;
    
  1. 延遲加載庫
  • 延遲(deferred)加載(也稱為延遲(lazy)加載)允許應用程序按需加載庫膏孟。下面是當你可能會使用延遲加載某些情況:

    • 為了減少應用程序的初始啟動時間眯分;
    • 執(zhí)行A / B測試-嘗試的算法的替代實施方式中;
    • 加載很少使用的功能柒桑,例如可選的屏幕和對話框弊决。
  • 為了延遲加載一個庫,你必須使用 deferred as 先導入它魁淳。

     import 'package:deferred/hello.dart' deferred as hello;
    
  • 當需要庫時飘诗,使用該庫的調用標識符調用LoadLibrary()

    greet() async {
       await hello.loadLibrary();
        hello.printGreeting();
     }
    
  • 在前面的代碼界逛,在庫加載好之前昆稿,await關鍵字都是暫停執(zhí)行的。有關 asyncawaitasynchrony support 的更多信息息拜。

  • 您可以在一個庫調用LoadLibrary() 多次都沒有問題溉潭。該庫也只被加載一次净响。

  • 當您使用延遲加載,請記住以下內容:

    • 延遲庫的常量在其作為導入文件時不是常量喳瓣。記住馋贤,這些常量不存在,直到遲庫被加載完成畏陕。
    • 你不能在導入文件中使用延遲庫常量的類型配乓。相反,考慮將接口類型移到同時由延遲庫和導入文件導入的庫惠毁。
    • Dart隱含調用LoadLibrary()插入到定義deferred as namespace犹芹。在調用LoadLibrary()函數(shù)返回一個Future
  1. library
  • library 來來命名庫鞠绰,用part來指定庫中的其他文件羽莺。 注意:不必在應用程序中(具有頂級main()函數(shù)的文件)使用library,但這樣做可以讓你在多個文件中執(zhí)行應用程序洞豁。
  1. 聲明庫
  • 利用library identifier(庫標識符)指定當前庫的名稱:
    // 聲明庫盐固,名ballgame
    library ballgame;
    
    // 導入html庫
    import 'dart:html';
    
    // ...代碼從這里開始... 
    
  1. 庫的拆分
  • 添加實現(xiàn)文件,把part fileUri放在有庫的文件丈挟,其中fileURI是實現(xiàn)文件的路徑刁卜。然后在實現(xiàn)文件中,添加部分標識符part of identifier曙咽,其中標識符是庫的名稱蛔趴。下面的示例使用的一部分,在三個文件來實現(xiàn)部分庫例朱。

  • 第一個文件孝情,ballgame.dart,聲明球賽庫洒嗤,導入其他需要的庫箫荡,并指定ball.dart和util.dart是此庫的部分:

    library ballgame;
    
    import 'dart:html';
    // ...其他導入在這里...
    part 'ball.dart';
    part 'util.dart';
    
    // ...代碼從這里開始...
    
  • 第二個文件ball.dart,實現(xiàn)了球賽庫的一部分:

    part of ballgame;
    
    // ...代碼從這里開始...
    
  • 第三個文件渔隶,util.dart羔挡,實現(xiàn)了球賽庫的其余部分:

    part of ballgame;
    
    // ...Code goes here...
    
  1. export
  • 可以通過重新導出部分庫或者全部庫來組合或重新打包庫。例如间唉,你可能有實現(xiàn)為一組較小的庫集成為一個較大庫绞灼。或者你可以創(chuàng)建一個庫呈野,提供了從另一個庫方法的子集低矮。
    // In french.dart:
    library french;
    
    hello() => print('Bonjour!');
    goodbye() => print('Au Revoir!');
    
    // In togo.dart:
    library togo;
    
    import 'french.dart';
    export 'french.dart' show hello;
    
    // In another .dart file:
    import 'togo.dart';
    
    void main() {
       hello();   //print bonjour
       goodbye(); //FAIL
    }
    
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市被冒,隨后出現(xiàn)的幾起案子军掂,更是在濱河造成了極大的恐慌轮蜕,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件良姆,死亡現(xiàn)場離奇詭異肠虽,居然都是意外死亡幔戏,警方通過查閱死者的電腦和手機玛追,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闲延,“玉大人痊剖,你說我怎么就攤上這事±萘幔” “怎么了陆馁?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長合愈。 經(jīng)常有香客問我叮贩,道長,這世上最難降的妖魔是什么佛析? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任益老,我火速辦了婚禮,結果婚禮上寸莫,老公的妹妹穿的比我還像新娘捺萌。我一直安慰自己,他們只是感情好膘茎,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布桃纯。 她就那樣靜靜地躺著,像睡著了一般披坏。 火紅的嫁衣襯著肌膚如雪态坦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音,去河邊找鬼佃迄。 笑死贮泞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的窒典。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猜绣!你這毒婦竟也來了?” 一聲冷哼從身側響起敬特,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤掰邢,失蹤者是張志新(化名)和其女友劉穎牺陶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辣之,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掰伸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怀估。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狮鸭。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖多搀,靈堂內的尸體忽然破棺而出歧蕉,到底是詐尸還是另有隱情,我是刑警寧澤康铭,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布惯退,位于F島的核電站,受9級特大地震影響从藤,放射性物質發(fā)生泄漏催跪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一夷野、第九天 我趴在偏房一處隱蔽的房頂上張望懊蒸。 院中可真熱鬧,春花似錦扫责、人聲如沸榛鼎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽者娱。三九已至,卻和暖如春苏揣,著一層夾襖步出監(jiān)牢的瞬間黄鳍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工平匈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留框沟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓增炭,卻偏偏與公主長得像忍燥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隙姿,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容