Dart中的庫 系統(tǒng)庫 自定義庫 第三方庫

Dart中的庫

前面介紹Dart基礎(chǔ)知識的時候基本上都是在一個文件里面編寫Dart代碼的锯茄,但實際開發(fā)中不可能這么寫欠痴,模塊化很重要蚊锹,所以這就需要使用到庫的概念熙暴。

在Dart中闺属,庫的使用時通過import關(guān)鍵字引入的。

library指令可以創(chuàng)建一個庫周霉,每個Dart文件都是一個庫掂器,即使沒有使用library指令來指定。

Dart中的庫主要有三種:

  • 我們自定義的庫
    import 'lib/xxx.dart';
  • 系統(tǒng)內(nèi)置庫
    import 'dart:math';
    import 'dart:io';
    import 'dart:convert';
  • Pub包管理系統(tǒng)中的庫
    https://pub.dev/packages
    https://pub.flutter-io.cn/packages
    https://pub.dartlang.org/flutter/
    1俱箱、需要在自己想項目根目錄新建一個pubspec.yaml
    2国瓮、在pubspec.yaml文件 然后配置名稱 、描述狞谱、依賴等信息
    3乃摹、然后運行 pub get 獲取包下載到本地
    4、項目中引入庫 import 'package:http/http.dart' as http; 看文檔使用

一跟衅、自定義庫的導(dǎo)入

Animal.dart
class Animal{
  String _name;   //私有屬性
  int age; 
  //默認構(gòu)造函數(shù)的簡寫
  Animal(this._name,this.age);

  void printInfo(){   
    print("${this._name}----${this.age}");
  }

  String getName(){ 
    return this._name;
  } 
  void _run(){
    print('這是一個私有方法');
  }

  execRun(){
    this._run();  //類里面方法的相互調(diào)用
  }
}

導(dǎo)入
import 'lib/Animal.dart';
main(){
  var a=new Animal('小黑狗', 20);
  print(a.getName());
}

二孵睬、系統(tǒng)庫

io、math
// import 'dart:io';
import "dart:math";
main(){

    print(min(12,23));

    print(max(12,25));

}

網(wǎng)絡(luò)庫(實現(xiàn)網(wǎng)絡(luò)請求)
import 'dart:io';
import 'dart:convert';

void main() async{
  var result = await getDataFromZhihuAPI();
  print(result);
}

//api接口: http://news-at.zhihu.com/api/3/stories/latest
getDataFromZhihuAPI() async{
  //1伶跷、創(chuàng)建HttpClient對象
  var httpClient = new HttpClient();  
  //2掰读、創(chuàng)建Uri對象
  var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest');
  //3秘狞、發(fā)起請求,等待請求
  var request = await httpClient.getUrl(uri);
  //4蹈集、關(guān)閉請求烁试,等待響應(yīng)
  var response = await request.close();
  //5、解碼響應(yīng)的內(nèi)容
  return await response.transform(utf8.decoder).join();
}

關(guān)于 Async Await
  • async和await
    這兩個關(guān)鍵字的使用只需要記住兩點:

    • 只有async方法才能使用await關(guān)鍵字調(diào)用方法
    • 如果調(diào)用別的async方法必須使用await關(guān)鍵字
  • async是讓方法變成異步拢肆。

  • await是等待異步方法執(zhí)行完成减响。

void main() async{
  var result = await testAsync();
  print(result);

}
//異步方法
testAsync() async{
  return 'Hello async';
}

三、第三方庫

pub包管理系統(tǒng):

    name: xxx
    description: A new flutter module project.
    dependencies:  
        http: ^0.12.0+2
        date_format: ^1.0.6

  • 3移盆、配置dependencies

  • 4、運行pub get 獲取遠程庫

  • 5伤为、看文檔引入庫使用

import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'package:date_format/date_format.dart';

main() async {
  var url = "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1";

    // Await the http get response, then decode the json-formatted responce.
    var response = await http.get(url);
    if (response.statusCode == 200) {
      var jsonResponse = convert.jsonDecode(response.body);

      print(jsonResponse);
    } else {
      print("Request failed with status: ${response.statusCode}.");
    }
    print(formatDate(DateTime(1989, 2, 21), [yyyy, '*', mm, '*', dd]));

}

Dart庫的重命名 Dart沖突解決

  • 1咒循、沖突解決
    當(dāng)引入兩個庫中有相同名稱標識符的時候,如果是java通常我們通過寫上完整的包名路徑來指定使用的具體標識符绞愚,甚至不用import都可以叙甸,但是Dart里面是必須import的。當(dāng)沖突的時候位衩,可以使用as關(guān)鍵字來指定庫的前綴裆蒸。如下例子所示:
    import 'package:lib1/lib1.dart';
    import 'package:lib2/lib2.dart' as lib2;

    Element element1 = new Element(); // Uses Element from lib1.
    lib2.Element element2 = new lib2.Element(); // Uses Element from lib2.

案例
import 'lib/Person1.dart';
import 'lib/Person2.dart' as lib;

main(List<String> args) {
  Person p1=new Person('張三', 20);
  p1.printInfo();

  lib.Person p2=new lib.Person('李四', 20);

  p2.printInfo();

}

部分導(dǎo)入

如果只需要導(dǎo)入庫的一部分,有兩種模式:
模式一:只導(dǎo)入需要的部分糖驴,使用show關(guān)鍵字僚祷,如下例子所示:
import 'package:lib1/lib1.dart' show foo;
模式二:隱藏不需要的部分,使用hide關(guān)鍵字贮缕,如下例子所示:
import 'package:lib2/lib2.dart' hide foo;

// import 'lib/myMath.dart' show getAge;

 import 'lib/myMath.dart' hide getName;

void main(){
//  getName();
  getAge();
}

延遲加載

也稱為懶加載辙谜,可以在需要的時候再進行加載。懶加載的最大好處是可以減少APP的啟動時間感昼。

    懶加載使用deferred as關(guān)鍵字來指定装哆,如下例子所示:

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

    當(dāng)需要使用的時候,需要使用loadLibrary()方法來加載:

    greet() async {
      await hello.loadLibrary();
      hello.printGreeting();
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末定嗓,一起剝皮案震驚了整個濱河市蜕琴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宵溅,老刑警劉巖凌简,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異层玲,居然都是意外死亡号醉,警方通過查閱死者的電腦和手機反症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔派,“玉大人铅碍,你說我怎么就攤上這事∠咭” “怎么了胞谈?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長憨愉。 經(jīng)常有香客問我烦绳,道長,這世上最難降的妖魔是什么配紫? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任径密,我火速辦了婚禮,結(jié)果婚禮上躺孝,老公的妹妹穿的比我還像新娘享扔。我一直安慰自己,他們只是感情好植袍,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布惧眠。 她就那樣靜靜地躺著,像睡著了一般于个。 火紅的嫁衣襯著肌膚如雪氛魁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天厅篓,我揣著相機與錄音秀存,去河邊找鬼。 笑死贷笛,一個胖子當(dāng)著我的面吹牛应又,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乏苦,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼株扛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汇荐?” 一聲冷哼從身側(cè)響起洞就,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掀淘,沒想到半個月后旬蟋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡革娄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年倾贰,在試婚紗的時候發(fā)現(xiàn)自己被綠了冕碟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡匆浙,死狀恐怖安寺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情首尼,我是刑警寧澤挑庶,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站软能,受9級特大地震影響迎捺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜查排,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一凳枝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雹嗦,春花似錦范舀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聪全。三九已至泊藕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間难礼,已是汗流浹背娃圆。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛾茉,地道東北人讼呢。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像谦炬,于是被迫代替她去往敵國和親悦屏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345