詳解flutter之網(wǎng)絡(luò)請求dio,請求,攔截器簡單示例
flutter一直很火的網(wǎng)絡(luò)請求插件dio
直接上代碼,寫成一個類,可以直接使用
包含請求的封裝,攔截器的封裝
import 'package:dio/dio.dart';
import 'dart:async';
import 'dart:io';
import './apidomain.dart';
import './httpHeaders.dart';
import 'package:shared_preferences/shared_preferences.dart';
class DioUtil{
static Dio dio = new Dio();
//請求部分
static Future request(url,{formData})async{
try{
Response response;
dio.options.headers = httpHeaders;
dio.options.contentType = ContentType.parse("application/json;charset=UTF-8");
if(formData == null){
response = await dio.post(serviceUrl+url);
}else{
response = await dio.post(serviceUrl+url,data:formData);
}
if(response.statusCode == 200){
return response;
}else{
throw Exception("接口異常R");
}
}catch(e){
print("網(wǎng)絡(luò)出現(xiàn)錯誤${e}");
}
}
//攔截器部分
static tokenInter(){
dio.interceptors.add(InterceptorsWrapper(
onRequest:(RequestOptions options){
// 在發(fā)送請求之前做一些預(yù)處理
//我這邊是在發(fā)送前到SharedPreferences(本地存儲)中取出token的值,然后添加到請求頭中
//dio.lock()是先鎖定請求不發(fā)送出去,當(dāng)整個取值添加到請求頭后再dio.unlock()解鎖發(fā)送出去
dio.lock();
Future<dynamic> future = Future(()async{
SharedPreferences prefs =await SharedPreferences.getInstance();
return prefs.getString("loginToken");
});
return future.then((value) {
options.headers["Authorization"] = value;
return options;
}).whenComplete(() => dio.unlock()); // unlock the dio
},
onResponse:(Response response) {
// 在返回響應(yīng)數(shù)據(jù)之前做一些預(yù)處理
return response; // continue
},
onError: (DioError e) {
// 當(dāng)請求失敗時做一些預(yù)處理
return e;//continue
}
));
}
}
httpHeaders文件則是放一些請求頭信息如下
const httpHeaders={
'Accept': 'application/json, text/plain, */*',
'Authorization': '666',
'Content-Type': 'application/json;charset=UTF-8',
'Origin': 'http://localhost:8080',
'Referer': 'http://localhost:8080/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
};
apidomain文件則是放api的地址信息如下
const serviceUrl = 'http://39.xxx.xxx.xx:8080';
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
unity5.6 導(dǎo)出gradle工程 Android Studio 導(dǎo)入問題及處理方法
這篇文章主要介紹了unity5.6 導(dǎo)出gradle工程 Android Studio 導(dǎo)入問題及處理方法,需要的朋友可以參考下2017-12-12
Android自定義View實(shí)現(xiàn)數(shù)獨(dú)游戲
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)數(shù)獨(dú)游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android按鈕按下的時候改變顏色實(shí)現(xiàn)方法
這篇文章主要介紹了Android按鈕按下的時候改變顏色實(shí)現(xiàn)方法,有需要的朋友可以參考一下2014-01-01
Android 8.0 讀取內(nèi)部和外部存儲以及外置SDcard的方法
今天小編就為大家分享一篇Android 8.0 讀取內(nèi)部和外部存儲以及外置SDcard的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Android?imageVIew實(shí)現(xiàn)鏡像旋轉(zhuǎn)的方法
在Android應(yīng)用開發(fā)中,有時候我們需要對ImageView中的圖片進(jìn)行鏡像旋轉(zhuǎn),以展示不同的效果,本文將介紹如何使用代碼實(shí)現(xiàn)ImageView的鏡像旋轉(zhuǎn)效果,這篇文章主要介紹了Android?imageVIew如何做鏡像旋轉(zhuǎn),需要的朋友可以參考下2024-06-06
Android自定義圓弧進(jìn)度條加數(shù)字動態(tài)變化
這篇文章主要為大家詳細(xì)介紹了Android自定義圓弧進(jìn)度條加數(shù)字動態(tài)變化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07

