Flutter網(wǎng)絡(luò)請求之dio的初步使用

一 卓箫、dio 簡介

dio 是一個國產(chǎn)巨佬寫的一個Flutter的網(wǎng)絡(luò)請求庫,寫這篇的文章的時候更新到3.x版本了蒂培。這里是他的 官方中文 使用鏈接:dio
按照原作者所說:

dio是一個強(qiáng)大的Dart Http請求庫搀缠,支持Restful API缰泡、FormData、攔截器弱左、請求取消窄陡、Cookie管理、文件上傳/下載拆火、超時跳夭、自定義適配器等...

二 、基本使用方法

  1. 添加依賴
dependencies:
  dio: ^3.0.9  // 請使用pub上3.0.0分支的最新版本

我這里這個時候的是一個3.0.9版本们镜,這里的 ^符號币叹,表示3.多的庫比如說3.1.1啥的,也能更新下來模狭。

  1. 基本使用

dio的原作者給了我們一個簡單的例子

import 'package:dio/dio.dart';
void getHttp() async {
  try {
    Response response = await Dio().get("http://www.****.com");
    print(response);
  } catch (e) {
    print(e);
  }
}

我們基礎(chǔ)的使用颈抚,請求一個URL,這里就直接是 Dio().get("http://www.****.com")嚼鹉。這樣就可以通過get方式來請求我們的鏈接贩汉。

三 、項(xiàng)目實(shí)際使用方法

在我們項(xiàng)目中反砌,我們當(dāng)然不能直接使用 Dio().get("http://www.****.com")這樣的方法雾鬼,那樣的話如果以后我們要更換網(wǎng)絡(luò)請求的庫的話萌朱,我們要修改的地方宴树,就會非常的多。類似的問題晶疼,曾經(jīng)在iOS開發(fā)的歷史上出現(xiàn)過一次酒贬。最初的時候iOS的開發(fā)者大多使用的是一個叫 ASI的庫,但是在過了幾年的時候翠霍,這個庫不在維護(hù)了锭吨。這時候,我們就會去找一個新的網(wǎng)絡(luò)庫來代替他寒匙。當(dāng)時如果我們有500個文件中都直接使用 ASI零如,我們就需要改動500個地方。這樣的體力和眼力消耗锄弱,實(shí)在是太驚人了考蕾。所以,我們一般會自己創(chuàng)建一個專門的 網(wǎng)絡(luò)管理的類NetworkManager会宪。在NetworkManager里肖卧,我們把調(diào)用方法抽取出一個基礎(chǔ)的方法,使用的時候掸鹅,基于這個基礎(chǔ)的方法來調(diào)用塞帐。這樣拦赠,我們就能很方便的去進(jìn)去使用和維護(hù)。

  • 創(chuàng)建一個基礎(chǔ)的文件http_request.dart文件
import 'package:dio/dio.dart';
const String BASEURL = "https://www.****.com";

class HTTPConfig {
    static const baseURL = BASEURL;
    static const timeout = 1000;
}
class LYHttpRequest {
    static final BaseOptions options = BaseOptions(
            baseUrl: HTTPConfig.baseURL, connectTimeout: HTTPConfig.timeout);
    static final Dio dio = Dio(options);

    static Future<T> request<T>(String url,
            {String method = 'get', Map<String, dynamic> params, Interceptor inter}) async {
        // 1.請求的單獨(dú)配置
        final options = Options(method: method);

        // 2.添加第一個攔截器
        Interceptor dInter = InterceptorsWrapper(
                onRequest: (RequestOptions options) {
                    // 1.在進(jìn)行任何網(wǎng)絡(luò)請求的時候, 可以添加一個loading顯示

                    // 2.很多頁面的訪問必須要求攜帶Token,那么就可以在這里判斷是有Token

                    // 3.對參數(shù)進(jìn)行一些處理,比如序列化處理等
                    print("攔截了請求");
                    return options;
                },
                onResponse: (Response response) {
                    print("攔截了響應(yīng)");
                    return response;
                },
                onError: (DioError error) {
                    print("攔截了錯誤");
                    return error;
                }
        );
        List<Interceptor> inters = [dInter];
        if (inter != null) {
            inters.add(inter);
        }
        dio.interceptors.addAll(inters);

        // 3.發(fā)送網(wǎng)絡(luò)請求
        try {
            Response response = await dio.request<T>(url, queryParameters: params, options: options);
            return response.data;
        } on DioError catch(e) {
            return Future.error(e);
        }
    }
}

  • 創(chuàng)建一個主頁homepage使用的home_request.dart文件
import 'network_manager.dart';
class HomeRequest {
    static requestMovieList(int start) async {
        // 1.構(gòu)建URL
        final movieURL = "https://douban.uieee.com/v2/movie/top250?start=$start&count=20}";
        // 2.發(fā)送網(wǎng)絡(luò)請求獲取結(jié)果
        final result = await LYHttpRequest.request(movieURL);

        print("result is $result");
    }
}

這個時候我們就可以使用我們創(chuàng)建的類來直接調(diào)用我們的方法了葵姥。

  • 使用
    在主頁荷鼠,我們搞一個按鈕,點(diǎn)擊這個按鈕榔幸,我們就請求我們的方法
class LYHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("hello 大眠獸"),
        ),
        body: Center(
          child: RaisedButton(
              child: Text("請求數(shù)據(jù)"),
              onPressed: () {
                HomeRequest.requestMovieList(0);
              }
          ),
        )
    );
  }
}
主頁顯示.png
打印數(shù)據(jù).png

這樣颊咬,我們的dio的初步使用就完成了。下一篇文章來寫dio的進(jìn)階使用牡辽。

其他文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末态辛,一起剝皮案震驚了整個濱河市麸澜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奏黑,老刑警劉巖炊邦,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熟史,居然都是意外死亡馁害,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蹂匹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碘菜,“玉大人,你說我怎么就攤上這事限寞∪绦ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵履植,是天一觀的道長计雌。 經(jīng)常有香客問我,道長玫霎,這世上最難降的妖魔是什么凿滤? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮庶近,結(jié)果婚禮上翁脆,老公的妹妹穿的比我還像新娘。我一直安慰自己拦盹,他們只是感情好鹃祖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般恬口。 火紅的嫁衣襯著肌膚如雪校读。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天祖能,我揣著相機(jī)與錄音歉秫,去河邊找鬼。 笑死养铸,一個胖子當(dāng)著我的面吹牛雁芙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞螟,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兔甘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鳞滨?” 一聲冷哼從身側(cè)響起洞焙,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拯啦,沒想到半個月后澡匪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褒链,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年唁情,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫匹。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甸鸟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赛惩,到底是詐尸還是另有隱情哀墓,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布喷兼,位于F島的核電站,受9級特大地震影響后雷,放射性物質(zhì)發(fā)生泄漏季惯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一臀突、第九天 我趴在偏房一處隱蔽的房頂上張望勉抓。 院中可真熱鬧,春花似錦候学、人聲如沸藕筋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隐圾。三九已至伍掀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暇藏,已是汗流浹背蜜笤。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盐碱,地道東北人把兔。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像瓮顽,于是被迫代替她去往敵國和親县好。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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