Flutter Dio报connectTimeout[0ms]错误 如何修改超时配置解决创建笔记失败
问题原因
你遇到的Connecting timed out [0ms]报错,核心原因是初始化Dio实例时没有配置连接超时时长,Dio默认connectTimeout值为0,会触发连接超时逻辑。
另外两个现象属于正常情况:
- 请求根本没成功发送到服务端,没有生成响应对象,所以
e.response?.data打印为null - 控制台输出的DioError日志是你在
on DioError catch块中主动调用print打印的内容,不是未捕获的异常向外抛出。
修改位置与解决方案
超时配置直接写在Dio实例初始化的位置,也就是NoteDB类中声明dio变量的代码处,统一全局配置即可,不需要在每个单独请求里重复设置。
- 替换原有Dio初始化代码
根据你使用的Dio版本选择对应配置,将连接超时时长改为3000ms:
如果你使用的是Dio 5.x及以上新版本(参数接收Duration类型):
class NoteDB extends ApiCalls { // 替换原来的 final dio = Dio(); final dio = Dio( BaseOptions( connectTimeout: const Duration(milliseconds: 3000), // 连接超时时长设为3000ms receiveTimeout: const Duration(milliseconds: 3000), // 建议同步配置接收响应的超时时长 // 固定接口根地址可以直接在这里配置,省去每次请求手动拼接的步骤 // baseUrl: "你的接口根路径" ) ); final url = Url(); // 其余原有业务代码保持不变
如果你使用的是Dio 4.x及更早旧版本(参数直接接收int类型毫秒值):
final dio = Dio( BaseOptions( connectTimeout: 3000, receiveTimeout: 3000, ) );
- 配置超时后仍报错时,按以下点排查
- 本地调试场景下,安卓模拟器访问本机启动的后端服务不能用
localhost/127.0.0.1,要替换为10.0.2.2;iOS模拟器可以正常使用localhost;真机调试要替换为开发电脑所在局域网的实际IP - 确认拼接后的完整请求地址、端口、路径没有拼写错误,后端服务处于正常运行状态
- 修改配置后请全量重启应用,不要使用热重载,Dio实例在类初始化时创建,热重载不会触发重新加载
- 你当前的try-catch块仅打印了错误日志,没有显式返回值,异常分支会隐式返回null,如果需要额外的错误提示可以在catch块中补充对应逻辑,不影响正常返回的话显式写
return null;即可。
内容的提问来源于stack exchange,提问作者Ritvik adoor
相关产品推荐
相关产品推荐

