Dart-3 使用庫(kù) 引入 按需加載-異步(基礎(chǔ))

5) 使用庫(kù) 引入 按需加載

其中 pag.Calc.dart文件內(nèi)容,簡(jiǎn)單的 相加求和 ,還有一個(gè)相減求差轧拄。

int add(int x,int y){
  return x+y;
}

class Calc {
  int x;
  int y;
  Calc(int x , int y){
    this.x = x;
    this.y = y;
  }
  minus(){
    print(this.x-this.y);
  }
}

主程序如下:


import 'dart:convert';
//import 'dart:math';

import 'pkg/Calc.dart'; //引入
import 'package:http/http.dart' as http;  //調(diào)用外部的包
// deferred 延時(shí)加載  使用時(shí) 加載
import 'dart:math' deferred as math; //調(diào)用dart自身的包

void main() async {
  int start = 1;
  int count = 2;
  int result = add(2, 4);
  print(result);    // 6
  var m = new Calc(5,85);
  m.minus(); //-80

  //簡(jiǎn)單json序列化

  //官方↓↓↓↓↓↓↓
  //JSON.decode()僅返回一個(gè)Map<String, dynamic>汰具,這意味著我們直到運(yùn)行時(shí)才知道值的類(lèi)型。
  // 通過(guò)這種方法粥烁,我們失去了大部分靜態(tài)類(lèi)型語(yǔ)言特性:類(lèi)型安全贤笆、自動(dòng)補(bǔ)全和最重要的編譯時(shí)異常。
  // 這樣一來(lái)讨阻,我們的代碼可能會(huì)變得非常容易出錯(cuò)

  //簡(jiǎn)而言之 就像js處理數(shù)據(jù)一樣不夠嚴(yán)謹(jǐn) 沒(méi)有數(shù)據(jù)類(lèi)型  TS就是為了解決這個(gè)問(wèn)題
    var json1 = '''
        {
          "name": "John Smith",
          "email": "john@example.com"
        }
    ''';
    Map<String,dynamic> jsonp1 = json.decode(json1);
    assert(jsonp1 is Map);
    print("hello,${jsonp1["name"]}");   //hello,John Smith
    print("email,${jsonp1["email"]}");  //email,john@example.com

  //  模型類(lèi)中序列化JSON

  var json2 = '''
        {
          "name": "John2 Smith",
          "email": "john2@example.com"
        }
    ''';
  Map userMap = json.decode(json2);
  var jsonp2 = new Jsonp2.fromJson(userMap);
    print("hello,${jsonp2.name}");    //hello,John2 Smith
    print("email,${jsonp2.email}");   //email,john2@example.com

  //  ---------------------------------
  var url = 'https://douban.uieee.com/v2/movie/top250?start=${start}&count=${count}';
  var response = await http.get(url);
  print('Response status: ${response.statusCode}');   //Response status: 200
  //  print('Response body: ${response.body}');
  var encoded = json.decode(response.body.toString());//json解析  轉(zhuǎn)對(duì)象 需引入 'dart:convert';
  print(encoded);   //打印數(shù)據(jù)
  print(await http.read('https://www.baidu.com')); //返回百度 html格式
  //  ------------------------------------

  //  引入了math庫(kù)
  math.loadLibrary(); //用于延時(shí)加載 使用時(shí)  告知需加載  按需加載
  var random = new math.Random();
  print(random.nextInt(10));

}
//json解析成實(shí)例對(duì)象

class Jsonp2 {
  final String name;
  final String email;
  Jsonp2(this.name,this.email);
  Jsonp2.fromJson(Map<String,dynamic> json):name = json["name"],email = json["email"];
  Map<String,dynamic> toJson()=>{
    'name':name,
    'email':email
  };
}

6) 異步

因?yàn)镈art是單線(xiàn)程芥永,所以代碼在運(yùn)行線(xiàn)程中阻塞的話(huà),會(huì)使程序凍結(jié)钝吮,在Dart中Future表示異步操作的結(jié)果,異步操作可以允許程序在等待操作完成期間可以去完成其他工作埋涧。
最基本的異步表現(xiàn):

void main(){
  print('say hello');
  Future.delayed(new Duration(seconds: 5),(){
    print('吃飽了--這是異步');
  });
  print('play game');
  /*
    say hello
    play game
    //5秒后↓
    吃飽了--這是異步
  */
}

異步操作 同步調(diào)用 async...await

 void main() async {
  print('say hello');
  await Future.delayed(new Duration(seconds: 5),(){
    print('吃飽了--這是異步,但同步調(diào)用');
  });
  print('play game');
  Future.wait([
    //異步  程序同時(shí)進(jìn)行
    Future.delayed(new Duration(seconds: 1),(){
      print('異步001');
    }),
    Future.delayed(new Duration(seconds: 2),(){
     print('異步002');
    }),
    Future.delayed(new Duration(seconds: 5),(){
     print('異步003');
    }),
    Future.delayed(new Duration(seconds: 4),(){
     print('異步004');
    }),
  ]).then((List result){  //then 同js中then  await +異步 執(zhí)行結(jié)束后 執(zhí)行
            //    在async函數(shù)中使用try-catch來(lái)捕獲異常(或者使用catchError())
    print('異步all over');
  });
    //  要想同時(shí)運(yùn)行代碼,就要為一個(gè)web app或者一個(gè)worker創(chuàng)建一個(gè)isolate
   //所有Dart代碼都在一個(gè)擁有Dart代碼使用的所有內(nèi)存的isolate上下文中運(yùn)行奇瘦。Dart代碼在運(yùn)行的時(shí)候棘催,在同一隔離中的其他代碼不能運(yùn)行。
   //如果你希望Dart代碼的多個(gè)部分同時(shí)運(yùn)行耳标,你可以將它們?cè)诓煌膇solate中運(yùn)行(Weba pps使用workers代替isolates)巧鸭。多個(gè)isolate同時(shí)運(yùn)行,通常是各自運(yùn)行在各自的CPU上麻捻。isolate不共享內(nèi)存纲仍,它們可以交互的唯一方式就是互相發(fā)送消息呀袱。

  //同步寫(xiě)法  此時(shí) 時(shí)間需累加 時(shí)間變長(zhǎng)
  await Future.delayed(new Duration(seconds: 1),(){
    print('005');
  });
   await Future.delayed(new Duration(seconds: 2),(){
   print('006');
   });
   await Future.delayed(new Duration(seconds: 5),(){
   print('007');
   });
   await Future.delayed(new Duration(seconds: 4),(){
   print('008');
   });

   /*
      say hello
      吃飽了--這是異步,但同步調(diào)用
      play game
      異步001
      005
      異步002
      006
      異步004
      異步003
      異步all over
      007
      008
  */
}

太長(zhǎng)啦,還不支持錨點(diǎn)郑叠,所以拆成三篇

參考

簡(jiǎn)書(shū): dart--future
Flutter中文網(wǎng)--json序列化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夜赵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乡革,更是在濱河造成了極大的恐慌寇僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沸版,死亡現(xiàn)場(chǎng)離奇詭異嘁傀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)视粮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)细办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蕾殴,你說(shuō)我怎么就攤上這事笑撞。” “怎么了钓觉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵茴肥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我荡灾,道長(zhǎng)瓤狐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任批幌,我火速辦了婚禮芬首,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逼裆。我一直安慰自己郁稍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布胜宇。 她就那樣靜靜地躺著耀怜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桐愉。 梳的紋絲不亂的頭發(fā)上财破,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音从诲,去河邊找鬼左痢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俊性。 我是一名探鬼主播略步,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼定页!你這毒婦竟也來(lái)了趟薄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤典徊,失蹤者是張志新(化名)和其女友劉穎杭煎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卒落,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羡铲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儡毕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片也切。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妥曲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钦购,我是刑警寧澤檐盟,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站押桃,受9級(jí)特大地震影響葵萎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唱凯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一羡忘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧磕昼,春花似錦卷雕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峰鄙,卻和暖如春浸间,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吟榴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工魁蒜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓兜看,卻偏偏與公主長(zhǎng)得像锥咸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铣减,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容