Flutter學習整理(一)

Flutter開發(fā)對于Http對于網絡請求的封裝及Json數(shù)據處理

logo.jpeg

目錄

Flutter學習整理(二)

前言

????自谷歌在2018大會公布Beta1也有了一段時間,這段時間以來flutter也越來越熱。這段時間我也對Flutter進行了一些學習秉犹,今天準備把一些學的內容進行整理,一是為了梳理下學習的一些知識節(jié)點,二是通過一些封裝整理,方便后期如過需要使用flutter開發(fā)可以快速搭建基礎組件進行開發(fā)跑杭。

目錄結構

15585042055957.jpg

對于項目,我做了如上一些目錄區(qū)分:
dao:主要做一些接口調用及邏輯處理咆耿。
exts:做一些擴展累比如callback等德谅。
http:對網絡請求dio的再次封裝。
json:對數(shù)據json解析接口定義萨螺。
model:對bean類的定義窄做。
viewmodel:對頁面數(shù)據集合類。

這篇文章中屑迂,主要是對http和json解析兩塊的封裝使用浸策。

HTTP

Dio

????dio作為一個強大的Drat Http開源請求庫,我們已經可以很方便的使用它進行一些網絡請求惹盼,但我對它進行了二次封裝庸汗,主要是一些配置的統(tǒng)一設置和一些邏輯的統(tǒng)一處理。

15585068875920.jpg

????我們先來看DioUtil類手报,這里我采用單例模式來創(chuàng)建dio對象蚯舱,并默認設置了baseurl,也可以在項目啟動使用通過init()方法設置Options來初始化配置掩蛤。

http

15585079511513.jpg

????在HttpUtil中最主要是對dio的request()方法進行封裝枉昏,提供了統(tǒng)一的配置和處理。
其中:

 //可以通過mheaders配置公共head
    mheaders = new Map<String, dynamic>();
    if (handers != null) {
      mheaders.addAll(handers);
    }
    options.headers = mheaders;

????可以通過mheaders配置統(tǒng)一的head及組合由方法傳入的handers組成最終的請求head揍鸟。

static String errorNet = "{\"code\":19,\"msg\":\"網絡錯誤兄裂,請檢查網絡情況\"}";

ConnectUtil.isConnect((val) async {
    if (val) {
        ...
   } else {
        callback(19, errorNet);
      } 
}

????在真正請求開始前通過ConnectUtil做網絡情況判斷,因為異步阳藻,所以通過回調方式處理并做預定格式返回錯誤晰奖。(網絡情況判斷通過第三方connectivity框架實現(xiàn))

static String errorMsg = "{\"code\":0,\"msg\":\"數(shù)據訪問錯誤,請檢查\"}";

final code = response.statusCode;
          final strJson = response.data.toString();
          LogUtil.d("HttpUtil", "code:" + code.toString() + " outdata:" + data);
          if (strJson != null && strJson != "") {
            if (code != 200) {
              callback(0, errorMsg);
            } else {
              callback(code, strJson);
            }
          } else {
            callback(0, errorMsg);
          }

????請求返回后腥泥,如果請求錯誤匾南,也同樣做了統(tǒng)一的錯誤格式返回,同時也可以在這里做統(tǒng)一的錯誤邏輯處理蛔外。

15585091230552.jpg

????同時HttpUtil提供get和post兩個簡單的api進行及少量入參即可進行網絡請求蛆楞。

JSON

????因為Flutter中是禁止反射的溯乒,所為我們也就不能使用GSON / Jackson之類的進行序列化和反序列化。然而我們現(xiàn)在很多時間接口請求都是以json格式進行返回的豹爹。那么又怎么樣實現(xiàn)從json到model到轉換呢裆悄。
????在項目中我通過我通過dart:convert中內置的JSON解碼器,它將原始JSON字符串傳遞給JSON.decode() 方法臂聋,然后在返回的Map<String, dynamic>中查找所需的值灯帮,通過手動的方式進行實現(xiàn)。

15585105639025.jpg

????首先通過JsonModel設置抽象方法bind(),然后讓所有model類都繼承JsonModel類并實現(xiàn)bind()方法逻住,并且bing方法的參數(shù)為Map類型,所以每個model方法只需先實現(xiàn)中通過map獲取所需的屬性值即可迎献。如下面UserModel類所示瞎访。


15585107540593.jpg

????那我們又在什么時候吧json轉換成map的呢?入下圖吁恍,我創(chuàng)建了JsonViewModel類來進行此項操作扒秸。


15585110228177.jpg

15585115237214.jpg

????在JsonViewModel中通過fromJson()方法傳入json字符串,然后通過json.decode(data)方法解析成map冀瓦。
????因為JsonViewModel也同樣繼承了JsonModel伴奥。所以我們可以bind(jMap["data"]);的形式調研bind方法并傳入對于數(shù)據,并且在JsonViewModel的子類中做具體處理翼闽。
????要注意的是拾徙,我們預先把返回的json格式定義成了code,msg感局,data的形式尼啡,如果預定義的返回格式有修改可以在這邊進行調整。

15585116032962.jpg

????至此询微,我們只需要在請求返回時候實例化對應的viewmodel類崖瞭,并調用fromJson()方法就可以得到對于的數(shù)據實體了。

GitHub

要看源碼點這里

大家要是看了覺得還可以撑毛,點個贊給個支持呀书聚!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藻雌,隨后出現(xiàn)的幾起案子雌续,更是在濱河造成了極大的恐慌,老刑警劉巖蹦疑,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件西雀,死亡現(xiàn)場離奇詭異,居然都是意外死亡歉摧,警方通過查閱死者的電腦和手機艇肴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門腔呜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人再悼,你說我怎么就攤上這事核畴。” “怎么了冲九?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵谤草,是天一觀的道長。 經常有香客問我莺奸,道長丑孩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任灭贷,我火速辦了婚禮温学,結果婚禮上,老公的妹妹穿的比我還像新娘甚疟。我一直安慰自己仗岖,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布览妖。 她就那樣靜靜地躺著轧拄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讽膏。 梳的紋絲不亂的頭發(fā)上檩电,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音府树,去河邊找鬼是嗜。 笑死,一個胖子當著我的面吹牛挺尾,可吹牛的內容都是我干的鹅搪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼遭铺,長吁一口氣:“原來是場噩夢啊……” “哼丽柿!你這毒婦竟也來了?” 一聲冷哼從身側響起魂挂,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甫题,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涂召,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坠非,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年果正,在試婚紗的時候發(fā)現(xiàn)自己被綠了炎码。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盟迟。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潦闲,靈堂內的尸體忽然破棺而出攒菠,到底是詐尸還是另有隱情,我是刑警寧澤歉闰,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布辖众,位于F島的核電站,受9級特大地震影響和敬,放射性物質發(fā)生泄漏凹炸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一昼弟、第九天 我趴在偏房一處隱蔽的房頂上張望还惠。 院中可真熱鬧,春花似錦私杜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笆怠,卻和暖如春铝耻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬刷。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工瓢捉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人办成。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓泡态,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迂卢。 傳聞我的和親對象是個殘疾皇子某弦,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容