[Flutter] 異步操作和 HTTP 請求

async 和 await

Dart 語言支持函數(shù)進行異步操作的處理,使用 asyncawait勺远。
第一步將函數(shù)標記為 aynsc

Future<void> getData async {
    // 發(fā)起異步操作
}
``
第二步在函數(shù)體內(nèi)進行異步請求答憔,可以等待任務(wù)返回前阻塞當前線程
Future<void> getData async {
    await Future.dealy(Duration(seconds: 2), () {
           print("打印111"):
    });
    print("打印 222")
}

因為使用了 await 操作价涝,所以異步請求會先完成打印 111 后再執(zhí)行打印 222,否則會先打印 222 再打印 111澜共。

Future

在 Future 的任務(wù)閉包中,可以選擇返回值锥腻,這樣可以在 await 時獲取到閉包任務(wù)的返回值

String ret = await Future.dealy(Duration(seconds: 2), () {
           return "打印111";
    });
 print(ret);

注意點

不要在 initState 等生命周期函數(shù)中使用 async 和 await 因為會阻塞渲染的線程嗦董,而應(yīng)該單獨寫一個方法進行異步執(zhí)行后調(diào)用 setState 進行數(shù)據(jù)界面的刷新。

void requestData async () {
    var result = await WebService.request((response){
        return respone.data;
    });
    setState(() {
        this.data = result;
    });
}

HTTP 請求

pub.flutter-io 中搜索 http瘦黑,可以找到一個名為 http 庫京革,將其添加在 pubspec.yaml 中并執(zhí)行 pub get 可以將其依賴到工程中。
定義一個請求函數(shù)

// 在文件中引入依賴
import 'package:http/http.dart';

// 定義請求數(shù)據(jù)的函數(shù)
Future<Void> requestData() async {
    Response resp = await get("https://example.com/api");
    print(resp)
}

一般返回數(shù)據(jù)是 json 格式幸斥,需要引入 json decoder 進行解析

// 引入 Dart 自帶的 decoder
import 'dart:converter';

// 對請求結(jié)果的 body 進行解析
Map data = jsonDecode(resp.body);

注意請求函數(shù)是會拋出異常的匹摇,因此需要進行必要的 try-catch 處理。

try {
  Response resp = get("xxxxx");
  Map data = jsonDecode(resp.body);
  this.text = data['text'];
} catch (exception) {
    this.text = 'failed';
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甲葬,一起剝皮案震驚了整個濱河市廊勃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌经窖,老刑警劉巖坡垫,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異画侣,居然都是意外死亡冰悠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門配乱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溉卓,“玉大人皮迟,你說我怎么就攤上這事〉乃校” “怎么了万栅?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長西疤。 經(jīng)常有香客問我烦粒,道長,這世上最難降的妖魔是什么代赁? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任扰她,我火速辦了婚禮,結(jié)果婚禮上芭碍,老公的妹妹穿的比我還像新娘徒役。我一直安慰自己,他們只是感情好窖壕,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布忧勿。 她就那樣靜靜地躺著,像睡著了一般瞻讽。 火紅的嫁衣襯著肌膚如雪鸳吸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天速勇,我揣著相機與錄音晌砾,去河邊找鬼。 笑死烦磁,一個胖子當著我的面吹牛养匈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播都伪,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼呕乎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陨晶?” 一聲冷哼從身側(cè)響起楣嘁,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珍逸,沒想到半個月后逐虚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谆膳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年叭爱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漱病。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡买雾,死狀恐怖把曼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漓穿,我是刑警寧澤嗤军,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站晃危,受9級特大地震影響叙赚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僚饭,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一震叮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳍鸵,春花似錦苇瓣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贪薪,卻和暖如春媳禁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背古掏。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工损话, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侦啸,地道東北人槽唾。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像光涂,于是被迫代替她去往敵國和親庞萍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345