Flutter學(xué)習(xí)(四)Http請(qǐng)求庫 dio代碼封裝

Flutter學(xué)習(xí)(四)Http請(qǐng)求庫 dio代碼封裝

第一步 依賴庫

打開flutter package網(wǎng)站,入口,找到dio這個(gè)組件,查看最新版本

打開 項(xiàng)目根目錄下 ** pubspec.yaml ** 文件

添加庫名,添加庫名

最好是填寫 any(** 添加兼容版本 **),也或者直接從網(wǎng)站復(fù)制最新版本即可,

執(zhí)行 packages get 命令,安裝依賴

代碼部分

import 'package:dio/dio.dart';

import 'config.dart';//用于配置公用常量

class Http{

? static Http instance;

? static String token;

? static Config _config = new Config();

? static Dio _dio;

? Options _options;

? static Http getInstance(){

? ? print("getInstance");

? ? if(instance == null){

? ? ? instance? = new Http();

? ? }

? }

? Http(){

? // 初始化 Options

? ? _options =new Options(

? ? ? baseUrl: _config.base_url,

? ? ? connectTimeout: _config.connectTimeout,

? ? ? receiveTimeout: _config.receiveTimeout,

? ? ? headers: {}

? ? );

? ? _dio = new Dio(_options);

//發(fā)送請(qǐng)求攔截處理,例如:添加token使用

? ? _dio.interceptor.request.onSend = (Options options) async{

? ? ? print(options.baseUrl);

? ? ? return options;

? ? };

//請(qǐng)求成功攔截,簡化代碼中調(diào)用難度

? ? _dio.interceptor.response.onSuccess = (Response response) async{

? ? ? print(response.statusCode);

? ? ? return response;

? ? };

//請(qǐng)求失敗攔截

? ? _dio.interceptor.response.onError = (DioError e) {

? ? ? print(e);

? ? ? return e;

? ? };

? }

? // get 請(qǐng)求封裝

? get(url,{ options, cancelToken, data=null}) async {

? ? print('get:::url:$url ,body: $data');

? ? Response response;

? ? try{

? ? ? response = await _dio.get(

? ? ? ? ? url,

? ? ? ? ? data:data,

? ? ? ? ? cancelToken:cancelToken

? ? ? );

? ? }on DioError catch(e){

? ? ? if(CancelToken.isCancel(e)){

? ? ? ? print('get請(qǐng)求取消! ' + e.message);

? ? ? }else{

? ? ? ? print('get請(qǐng)求發(fā)生錯(cuò)誤:$e');

? ? ? }

? ? }

? ? return response.data;

? }

// post請(qǐng)求封裝

? post(url,{ options, cancelToken, data=null}) async {

? ? print('post請(qǐng)求::: url:$url ,body: $data');

? ? Response response;

? ? try{

? ? ? response = await _dio.post(

? ? ? ? ? url,

? ? ? ? ? data:data !=null ? data : {},

? ? ? ? ? cancelToken:cancelToken

? ? ? );

? ? ? print(response);

? ? }on DioError catch(e){

? ? ? if(CancelToken.isCancel(e)){

? ? ? ? print('get請(qǐng)求取消! ' + e.message);

? ? ? }else{

? ? ? ? print('get請(qǐng)求發(fā)生錯(cuò)誤:$e');

? ? ? }

? ? }

? ? return response.data;

? }

}

調(diào)用

頁面中引入文件:

import ‘util/http.dart’;

? var response = await Http().get(

? ? ? ? ? ? ? ? "tree/json",

? ? ? ? ? ? ? ? data: {'pageIndex': 1, 'pageSize': 10});

? ? print(response);

6.解析數(shù)據(jù)

官方推薦使用json_serializable進(jìn)行數(shù)據(jù)解析

下一章節(jié)貼上json_serializable的使用方法供大家參考,歡迎指正和互相交流;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容