Flutter之網(wǎng)絡(luò)請求和數(shù)據(jù)解析&&FutureBuilder渲染頁面

一橙弱、網(wǎng)絡(luò)請求和數(shù)據(jù)解析

Future: 是與異步操作一起工作的核心類歧寺,它表示未來某個(gè)時(shí)間可能出現(xiàn)的可用值或錯(cuò)誤
http.Response 包含一個(gè)成功的http拿到的請求數(shù)據(jù)

  • 如何用http庫做Get請求
  • 如何用http庫做Post請求
  • 如何將response轉(zhuǎn)換成Dart Object
  • 如何將請求結(jié)果展示在界面上

1.準(zhǔn)備網(wǎng)絡(luò)數(shù)據(jù)和下載依賴

前后端分離燥狰,做測試很方便

相關(guān)網(wǎng)站

打開Dart.page 搜索 http

https://pub.dev
https://pub.dev/packages/http

導(dǎo)入工程

  • 包服務(wù)于 Dart-
  • 插件依賴于原生

flutter 導(dǎo)入package

image

安裝依賴

#cd 到根目錄執(zhí)行以下代碼
flutter packages get

2.使用http 請求數(shù)據(jù)

1.導(dǎo)入http package

import 'dart:convert';//數(shù)據(jù)解析和模型互轉(zhuǎn)
import 'package:http/http.dart' as http;//http庫

2.請求數(shù)據(jù)(getDatas)

Future<List<Chat>> getDatas() async {

 //await 等到 http.get 拿到響應(yīng)之后再執(zhí)行其他代碼
 final response = await http.get('http://rap2api.taobao.org/app/mock/225870/api/chat/list');
 if (response.statusCode == 200){
   //獲取響應(yīng)數(shù)據(jù),并且轉(zhuǎn)換成Map類型
   final responseBody = json.decode(response.body);
   //轉(zhuǎn)換模型數(shù)組
   List<Chat> chatList = responseBody['chat_list']
       .map<Chat>((item) => Chat.fromJson(item))
       .toList();
   //print('chatList$chatList');
   return chatList;
 }else {
   throw Exception('statusCode:${response.statusCode}');
 }
}

3.json -> Map -> 模型

  • 小型項(xiàng)目:手動序列化
  • 大型項(xiàng)目:借助插件:json_serializablebuilt_value

簡單數(shù)據(jù)解析

final chat = {
  'name' : '張三',
  'message' : '吃飯了嗎斜筐?',
};
//map 轉(zhuǎn)json
final chatJson = json.encode(chat);
print('chat_json:$chatJson');//chat_json:{"name":"張三","message":"吃飯了嗎龙致?"}
//json 轉(zhuǎn) map
final newChat = json.decode(chatJson);
print(newChat is Map);
print('newChat:$newChat');//newChat:{name: 張三, message: 吃飯了嗎?}
//map 轉(zhuǎn)模型
Chat chatModel = Chat.fromJson(newChat);
print('name:${chatModel.name} message:${chatModel.message}');

Chat 模型

class Chat {
  final String name;
  final String message;
  final String imageUrl;
  Chat({this.name, this.message, this.imageUrl});
  //類似于initWithJson
  factory Chat.fromJson(Map json) {
    return Chat(
      name: json['name'],
      message: json['message'],
      imageUrl: json['imageUrl'],
    );
  }
}

復(fù)雜JSON解析

復(fù)雜JSON解析

改成Final

改成Final

在線Json轉(zhuǎn)Dart

{
    "status": true,
    "msg": {
        "id": 399,
        "name": "Steven"
    }
}

https://javiercbk.github.io/json_to_dart/

顯示效果如圖下

在線Json轉(zhuǎn)Dart

二顷链、利用FutureBuilder渲染界面

  • AsyncSnapshot 異步快照
  • snapShot.connectionState 連接狀態(tài) waiting 和 done
  • ListTile ->列表平鋪頁
const ListTile({
    Key key,
    this.leading,              // item 前置圖標(biāo)
    this.title,                // item 標(biāo)題
    this.subtitle,             // item 副標(biāo)題
    this.trailing,             // item 后置圖標(biāo)
    this.isThreeLine = false,  // item 是否三行顯示
    this.dense,                // item 直觀感受是整體大小
    this.contentPadding,       // item 內(nèi)容內(nèi)邊距
    this.enabled = true,
    this.onTap,                // item onTap 點(diǎn)擊事件
    this.onLongPress,          // item onLongPress 長按事件
    this.selected = false,     // item 是否選中狀態(tài)
})

關(guān)鍵代碼

body: FutureBuilder(
    future: getDatas(),
    builder: (BuildContext context,AsyncSnapshot snapShot){
     print('data:${snapShot.data}');
     print('connectionState:${snapShot.connectionState}');
     if(snapShot.connectionState == ConnectionState.waiting){
       return Text('Loading...');
     }else {
       return ListView(
         children: snapShot.data.map<Widget>(
             (item){
               return ListTile(
                 title: Text(item.name),
                 subtitle: Container(height: 20,width: 20,child: Text(item.message,overflow: TextOverflow.ellipsis,),),
                 leading: CircleAvatar(
                   backgroundImage: NetworkImage(item.imageUrl),
                 ),
               );
             }
         ).toList(),
       );
     }

    },
  )

效果圖

FutureBuilder
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末目代,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗤练,更是在濱河造成了極大的恐慌榛了,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煞抬,死亡現(xiàn)場離奇詭異霜大,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)革答,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門战坤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人残拐,你說我怎么就攤上這事途茫。” “怎么了溪食?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵囊卜,是天一觀的道長。 經(jīng)常有香客問我错沃,道長栅组,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任枢析,我火速辦了婚禮笑窜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘登疗。我一直安慰自己,他們只是感情好嫌蚤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布辐益。 她就那樣靜靜地躺著,像睡著了一般脱吱。 火紅的嫁衣襯著肌膚如雪智政。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天箱蝠,我揣著相機(jī)與錄音续捂,去河邊找鬼垦垂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牙瓢,可吹牛的內(nèi)容都是我干的劫拗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矾克,長吁一口氣:“原來是場噩夢啊……” “哼页慷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胁附,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酒繁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后控妻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體州袒,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年弓候,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郎哭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弓叛,死狀恐怖彰居,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撰筷,我是刑警寧澤陈惰,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站毕籽,受9級特大地震影響抬闯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜关筒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一溶握、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒸播,春花似錦睡榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包雀,卻和暖如春宿崭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背才写。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工葡兑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奖蔓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓讹堤,卻偏偏與公主長得像吆鹤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蜕劝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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