flutter 怎么拦截请求_Flutter Dio 请求封装/拦截器(put,post,get,del)

本文介绍了如何在Flutter中使用Dio库进行HTTP请求的封装和拦截器设置,包括GET、POST、PUT、DELETE等方法的实现,并展示了如何在请求前、后进行处理。
摘要由CSDN通过智能技术生成

加入依赖:dio: ^3.0.9

class DioUtils {

/// global dio object

static Dio dio;

/// default options

static const int CONNECT_TIMEOUT = 10000;

static const int RECEIVE_TIMEOUT = 3000;

/// http request methods

static const String GET = 'get';

static const String NEWGET = 'newGet';

static const String POST = 'post';

static const String PUT = 'put';

static const String PATCH = 'patch';

static const String DELETE = 'delete';

/// 创建 dio 实例对象

static Future createInstance() async {

if (dio == null) {

/// 全局属性:请求前缀、连接超时时间、响应超时时间

var options = BaseOptions(

connectTimeout: 350000,

receiveTimeout: 150000,

responseType: ResponseType.json,

validateStatus: (status) {

// 不使用http状态码判断状态,使用AdapterInterceptor来处理(适用于标准REST风格)

return true;

},

baseUrl: baseURL,

headers: {

'Accept': 'application/json,*/*',

'Content-Type': 'application/json',

//'token':''

});

dio = new Dio(options);

dio.interceptors.add(InterceptorsWrapper(

onRequest: (RequestOptions options) {

/*. 拦截器请求 时 相关处理*/

print('上传接口:${options.uri}');

},

onResponse: (e) {

/* 拦截器 请求到数据后的 相关处理*/

print('获取数据信息:$e');

},

onError: (e) {

Navigator.pop(Router.navigatorState.currentState.context);

_showErrorDialog('网络连接错误,请重试!');

print('拦截器错误信息-->:$e');

},

));

}

return dio;

}

/// 清空 dio 对象

static clear() {

dio = null;

}

///Get请求

static void getHttp(

String url, {

parameters,

Function(T) onSuccess,

Function(String error) onError,

}) async {

try {

Dio dios = await createInstance();

Response response;

response = await dios.get(

url,

queryParameters: parameters,

); //cancelToken: token

var responseData = response.data;

var i = responseData['msg'];

if (responseData['code'] == 0) {

onSuccess(responseData['data']);

} else {

onError(responseData['msg']);

}

print('get返回结果-->$responseData');

print('get返回结果$i');

} catch (e) {

print('请求出错:' + e.toString());

onError(e.toString());

}

}

///Post请求

static void postHttp(

String url, {

parameters,

Function(T) onSuccess,

Function(String error) onError,

}) async {

try {

Dio dios = await createInstance();

Response response = await dios.post(

url,

data: parameters,

); //cancelToken: token

var responseData = response.data;

var i = responseData['msg'];

if (responseData['code'] == 0) {

onSuccess(responseData['data']);

} else if (responseData['code'] == 200) {

print('返回结果-->${responseData['code']}');

onSuccess(responseData['data']);

} else {

print('指向这里');

onError(responseData['msg']);

}

print('post返回结果$i');

} catch (e) {

print('post返回结果x $e');

}

}

/// request Get、Post 请求

//url 请求链接

//parameters 请求参数

//method 请求方式

//onSuccess 成功回调

//onError 失败回调

static void requestHttp(String url,

{parameters,

method,

Function(T t) onSuccess,

Function(String error) onError}) async {

parameters = parameters ?? {};

method = method ?? 'GET';

if (method == DioUtils.GET) {

getHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

} else if (method == DioUtils.NEWGET) {

newGetHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

} else if (method == DioUtils.POST) {

postHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

} else if (method == DioUtils.PUT) {

putHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

} else if (method == DioUtils.DELETE) {

deleteHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

}

}

只是简单的封装了Dio请求,具体可以根据自身需要做进一步处理!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值