You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 14:21:31