dio拦截器 flutter_Flutter 中 Dio 拦截器

本文介绍了如何在 Flutter 中使用 Dio 拦截器来处理动态Header、响应验证和错误处理。通过创建自定义拦截器,实现了添加SharedPreferences中的值作为Header、验证响应头和错误映射,还展示了缓存和日志记录功能。
摘要由CSDN通过智能技术生成

有时我们不需要复杂的应用程序,只需要显示一个数据列表的简单功能,我们可以通过一个简单的方法来实现:

Future fetchItems() {

return Dio().("https://some-website.com/listing");

}

复制代码

没有任何错误,也不用用log打印任何响应信息。

但是事实是,几乎没有这么简单的应用程序,有时我们需要做更多用于从服务器获取响应或调试我们的应用程序,比如:

将动态的Header发送给服务器,比如存储在SharedPreferences中的值。

检查每个响应头并保存他的值。

验证服务器返回的错误并将他们映射到我们应用程序中能够处理的错误类中。

另外,我们希望为我们的应用添加简单的缓存功能,以便在连接超时或用户无法访问网络时,可以显示该请求的缓存响应;

我们也可以添加log日志来打印我们的请求和响应信息。

Interceptors拦截器将通过为我们提供错误,请求和响应的特定回调来帮助我们处理这些问题。

在深入之前,我们先来看一下如何配置Dio。

Dio 配置

可以通过BaseOption来配置Dio,该对象允许我们设置一些参数来初始化Dio实例: connectTimeout,receiveTimeout和baseUrl,他们将用于每个Api的调用。

Dio createDio() {

return Dio(

BaseOptions(

connectTimeout: 5000,

receiveTimeout: 5000,

baseUrl: "https://some-website.com"

)

);

}

复制代码

但是在基本配置中无法添加拦截器,我们需要在创建dio实例的时候在拦截器集合中添加我们需要的拦截器:

Dio addInterceptors(Dio dio) {

return dio..interceptors.add(InterceptorsWrapper(

onRequest: (RequestOptions options) => requestInterceptor(options),

onResponse: (Response response) => responseInterceptor(response),

onError: (DioError dioError) => errorInterceptor(dioError)));

}

复制代码

我们已经设置了一个dio实例,可以用于任何一个Api调用。

添加动态Headers

假如我们需要将SharedPreferences中存储的一个值作为header传给服务器,我们不能使用BaseOption中的extra字段,该字段用于访问在创建请求时设置静态数据。

InterceptorsWrapper给我们提供了一个RequestOptions对象,有如下一些属性:

Request dynamic data

Url String path

Query Parameters Map queryParameters

有了这些信息,我们就可以实现我们自己的requestInterceptor方法了。

此方法返回一个动态类型,可以是:

RequestOptions对象,如果我们想继续请求的话

Response对象,如果应用程序想自己处理请求

DioError或dio.reject对象,将会抛出一个异常

这将使我们可以灵活的验证每个请求,添加数据以及在必要时抛出错误,我们使用起来只需要添加一些数据,然后处理返

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值