flutter 怎么拦截请求_Flutter-網絡請求

import 'dart:io';import 'package:dio/dio.dart';import 'package:private_tutor/common/SpUtils.dart';import 'package:connectivity/connectivity.dart';import 'dart:collection';import 'package:private_tutor/common/config/Config.dart';import 'package:private_tutor/net/ResultCode.dart';import 'package:private_tutor/net/ResultData.dart';///http请求管理类,可单独抽取出来

classHttpRequest {staticString _baseUrl;static const CONTENT_TYPE_JSON = "application/json";static const CONTENT_TYPE_FORM = "application/x-www-form-urlencoded";static Map optionParams ={"timeoutMs": 15000,"token": null,"authorizationCode": null,

};staticsetBaseUrl(String baseUrl){

_baseUrl=baseUrl;

}staticget(url,param) async{return await request(_baseUrl+url, param, null, new Options(method:"GET"));

}staticpost(url,param) async{return await request(_baseUrl+url, param, {"Accept": 'application/vnd.github.VERSION.full+json'}, new Options(method: 'POST'));

}staticdelete(url,param) async{return await request(_baseUrl+url, param, null, new Options(method: 'DELETE'));

}staticput(url,param) async{return await request(_baseUrl+url, param, null, new Options(method: "PUT", contentType: ContentType.text));

}///发起网络请求

///[ url] 请求url

///[ params] 请求参数

///[ header] 外加头

///[ option] 配置

static request(url, params, Map header, Options option, {noTip = false}) async {//没有网络

var connectivityResult = await (newConnectivity().checkConnectivity());if (connectivityResult ==ConnectivityResult.none) {return new ResultData(Code.errorHandleFunction(Code.NETWORK_ERROR, "", noTip), false, Code.NETWORK_ERROR);

}

Map headers = newHashMap();if (header != null) {

headers.addAll(header);

}//授权码

if (optionParams["authorizationCode"] == null) {

var authorizationCode=await getAuthorization();if (authorizationCode != null) {

optionParams["authorizationCode"] =authorizationCode;

}

}

headers["Authorization"] = optionParams["authorizationCode"];//设置 baseUrl

if (option != null) {

option.headers=headers;

}else{

option= new Options(method: "get");

option.headers=headers;

}///超时

option.connectTimeout = 15000;

Dio dio= newDio();//添加拦截器

if(Config.DEBUG) {

dio.interceptors.add(InterceptorsWrapper(

onRequest: (RequestOptions options){

print("\n================== 请求数据 ==========================");

print("url = ${options.uri.toString()}");

print("headers = ${options.headers}");

print("params = ${options.data}");

},

onResponse: (Response response){

print("\n================== 响应数据 ==========================");

print("code = ${response.statusCode}");

print("data = ${response.data}");

print("\n");

},

onError: (DioError e){

print("\n================== 错误响应数据 ======================");

print("type = ${e.type}");

print("message = ${e.message}");

print("stackTrace = ${e.stackTrace}");

print("\n");

}

));

}

Response response;try{

response=await dio.request(url, data: params, options: option);

} on DioErrorcatch(e) {//请求错误处理

Response errorResponse;if (e.response != null) {

errorResponse=e.response;

}else{

errorResponse= new Response(statusCode: 666);

}if (e.type ==DioErrorType.CONNECT_TIMEOUT) {

errorResponse.statusCode=Code.NETWORK_TIMEOUT;

}if(Config.DEBUG) {

print('请求异常: ' +e.toString());

print('请求异常 url: ' +url);

}return new ResultData(Code.errorHandleFunction(errorResponse.statusCode, e.message, noTip), false, errorResponse.statusCode);

}try{if (option.contentType != null && option.contentType.primaryType == "text") {return new ResultData(response.data, true, Code.SUCCESS);

}else{

var responseJson=response.data;if (response.statusCode == 201 && responseJson["token"] != null) {

optionParams["authorizationCode"] = 'token ' + responseJson["token"];

await SpUtils.save(Config.TOKEN_KEY, optionParams["authorizationCode"]);

}

}if (response.statusCode == 200 || response.statusCode == 201) {return ResultData(response.data, true, Code.SUCCESS, headers: response.headers);

}

}catch(e) {

print(e.toString()+url);return ResultData(response.data, false, response.statusCode, headers: response.headers);

}return new ResultData(Code.errorHandleFunction(response.statusCode, "", noTip), false, response.statusCode);

}///清除授权

staticclearAuthorization() {

optionParams["authorizationCode"] = null;

SpUtils.remove(Config.TOKEN_KEY);

}///获取授权token

staticgetAuthorization() async {

String token=await SpUtils.get(Config.TOKEN_KEY);if (token == null) {

String basic=await SpUtils.get(Config.USER_BASIC_CODE);if (basic == null) {//提示输入账号密码

} else{//通过 basic 去获取token,获取到设置,返回token

return "Basic $basic";

}

}else{

optionParams["authorizationCode"] =token;returntoken;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值