Flutter中使用Retrofit设置API请求超时的方法与代码位置
在Flutter中为Retrofit的API调用设置超时时间
Flutter的Retrofit库基于Dio封装,因此超时时间配置本质上是在Dio实例中完成的,Retrofit会直接复用Dio的配置参数。以下是具体实现方法:
一、全局超时配置(所有API通用)
直接在你提供的DioObject类的getDio()方法中,为Dio实例的options添加超时参数即可,该配置会作用于所有通过此Dio创建的Retrofit客户端请求。
修改后的DioObject代码:
class DioObject{ static Dio getDio(){ debugPrint("Bearer:- ${PrefHelper().pref?.getString(PrefHelper.AUTHORIZATION)}"); final dio = Dio(); // Provide a dio instance // 配置全局超时时间 dio.options.connectTimeout = const Duration(seconds: 10); // 连接服务器超时时间 dio.options.receiveTimeout = const Duration(seconds: 15); // 接收响应超时时间 dio.options.sendTimeout = const Duration(seconds: 10); // 发送请求数据超时时间 dio.options.headers["Authorization"] = "Bearer ${PrefHelper().pref?.getString(PrefHelper.AUTHORIZATION)}"; dio.options.headers["Content-Type"] = "application/json;charset=UTF-8"; return dio; } }
配置完成后,所有通过RestClient(DioObject.getDio())创建的客户端发起的API请求(比如client.xyz())都会自动应用这些超时规则。
二、单个接口自定义超时(覆盖全局配置)
如果需要为特定接口设置不同的超时时间,可以在Retrofit的接口定义中添加@DioOptions()参数,调用时传入自定义的Options对象即可。
1. 修改RestClient接口定义
@RestApi(baseUrl: "*****/api") abstract class RestClient { factory RestClient(Dio dio, {String baseUrl}) = _RestClient; @GET("/UserAccessPoints/") Future<CommonResponse> xyz(@DioOptions() Options? options); }
2. 调用时传入自定义超时配置
final client = RestClient(DioObject.getDio()); // 为该接口单独设置5秒连接超时,覆盖全局的10秒配置 var response = await client.xyz(Options(connectTimeout: const Duration(seconds: 5)));
内容的提问来源于stack exchange,提问作者Mohammad Taqi
相关产品推荐
相关产品推荐

