Flutter中使用Retrofit搭配Dio时如何设置API请求的responseType
实现方案
Retrofit for Dio 支持两种常用方案实现单接口指定responseType为bytes,不需要手动修改生成的代码:
方案1:方法注解直接配置(无侵入调用侧)
直接在接口方法上加@Headers注解指定响应类型,生成代码时会自动把该配置合并到RequestOptions中:
import 'package:dio/dio.dart'; @GET(API.blah_blah) @Headers(<String, dynamic>{ "responseType": ResponseType.bytes }) // 返回值直接指定为Uint8List,不需要用dynamic Future<Uint8List> getSomething();
该方案不需要修改调用侧代码,生成的请求代码会自动带上responseType: ResponseType.bytes配置。
方案2:参数传递Options(灵活适配多场景)
如果需要在调用时动态切换响应类型,可以把Options作为接口参数传入:
@GET(API.blah_blah) Future<Uint8List> getSomething({@Options() required Options options});
调用时传入对应配置即可:
final result = await api.getSomething( options: Options(responseType: ResponseType.bytes) );
补充说明
- 如果需要全局配置所有接口的响应类型,可以在初始化Dio实例时统一设置:
final dio = Dio(BaseOptions( responseType: ResponseType.bytes )); - 不要手动修改
retrofit_generator生成的代码,每次重新build都会覆盖手动修改的内容 - 返回值指定为
Uint8List即可直接拿到二进制数据,不需要额外做类型转换
内容的提问来源于stack exchange,提问作者meditat
相关产品推荐
相关产品推荐

