第九十五回 如何使用dio的转换器

文章目录

  • 概念介绍
  • 使用方法
    • 使用默认的转换器
    • 自定义转换器
  • 示例代码
  • 经验分享

我们在上一章回中介绍了"如何打造一个网络框架"相关的内容,本章回中将介绍 如何使用dio的转换器.闲话休提,让我们一起Talk Flutter吧。

概念介绍

转换器主要用来转换数据类型或者内容,它既可以转换客户端发送给服务器的数据,也可以转换服务器回复给客户端的数据。我们可以自己实现一个转换器,不过dio库提供了转换器:transform。本章回中将介绍它的使用方法。

使用方法

使用默认的转换器

在dio库中提供了默认的转换器BackgroundTransformer,我们可以直接使用它:

mDio.transformer.transformRequest();

这里的mDio是dio类型的对象。

自定义转换器

网络库dio提供了转换器:transform,它是一个抽象类,我们想使用转换器时只需要继承该类就可以,不过在继承时需要实现该类的两个抽象方法,详细如下:

  • transformRequest:该方法用来转换客户端发送给服务器的数据;
  • transformResponse:该方法用来转换服务器回复给客户端的数据;

我们只是概要性地介绍转换器中的抽象方法,详细内容可以参考下面的示例代码。

示例代码

///自定义的转换器,可以使用dio的提供的SyncTransformer,
class CustomTransform extends BackgroundTransformer{
  ///在PUT,POST和PATCH请求中才会回调
  
  Future<String> transformRequest(RequestOptions options) {
    // TODO: implement transformRequest
    print('transformRequest running');
    return super.transformRequest(options);
  }

  ///除了PUT,POST和PATCH请求外,GET请求中也会回调
  
  Future transformResponse(RequestOptions options, ResponseBody response) {
    // TODO: implement transformResponse
    print('transformResponse running');
    ///转换返回的数据 为string: response
    // return Future.value('response');
    ///不转换数据
    return super.transformResponse(options, response);
  }
}

我们在示例代码中自定义了一个转换器:CustomTransform,它是BackgroundTransformer转换器的子类,其实也可以直接继承Transformer这个抽象类,只是需要自己动手实现抽象方法,而不是像示例代码中一样直接调用父类的相关方法。

自己实现Transformer的抽象方法时可以参考SyncTransformer类的源代码,该类直接继承自Transformer类,而且它还是默认转换器BackgroundTransformer类的父类。

经验分享

转换器在实际项目中使用的的概率比较小,不过还是建议大家掌握它。此外,还有一些经验和大家分享:

  • 转换器只有在PUT,POST和PATCH这些Http请求中才有效果,因为只有这些请求中才带有数据。
  • 转换器中分请求转换器和响应转换器两个回调方法,请求转换器在请求拦截器后执行,响应转换器在响应拦截器前执行。
  • 转换器的功能和拦截器类似,使用方法也类似,加一个转换器的目的是为了在代码上与拦截器解耦。

看官们,关于"如何使用dio的转换器"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

你可能感兴趣的:(一起Talk,Flutter吧,android,转换器,dio转换器,ransformer)