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

Android模拟器中Flutter调用Flask接口遇连接关闭问题求助

解决思路

1. 关闭Flask的Debug模式

Flask的debug=True会启用自动重载机制,该机制可能在请求过程中导致服务器重启,进而引发连接中断问题。修改Flask启动代码:

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=False)

重启服务后重新测试请求。

2. 调整Dio的JSON解析逻辑

Dio默认会自动将JSON格式的响应解析为Map/List对象,手动调用jsonDecode(response.data)可能触发异常,导致请求流程中断。修改Dart代码:

static Future<dynamic> get(String endpoint) async {
  var url = buildUrl(endpoint);
  var response = await dio.get(url);
  // 直接返回Dio自动解析后的响应数据
  return response.data;
}

可以先打印response.data.runtimeType确认数据类型,再做后续处理。

3. 延长Dio的超时时间

网络波动或Flask响应缓慢可能导致请求超时断开,初始化Dio时配置更长的超时参数:

final dio = Dio(BaseOptions(
  connectTimeout: const Duration(seconds: 10),
  receiveTimeout: const Duration(seconds: 10),
));

4. 规范Flask的响应格式

确保Flask接口返回标准JSON响应并设置正确的Content-Type头,避免因格式问题导致解析失败:

from flask import jsonify

@app.route('/api/v1/test')
def test():
    return jsonify({"status": "success", "data": "test content"})

不要直接返回JSON格式的字符串,比如return '{"key": "value"}',这类响应可能因头信息缺失引发解析异常。

5. 捕获并打印Dio异常详情

在请求代码中添加异常捕获,输出具体错误信息,帮助定位问题根源:

static Future<dynamic> get(String endpoint) async {
  try {
    var url = buildUrl(endpoint);
    var response = await dio.get(url);
    print('响应状态码:${response.statusCode}');
    print('响应数据:${response.data}');
    return response.data;
  } catch (e) {
    print('请求异常详情:$e');
    rethrow;
  }
}

内容的提问来源于stack exchange,提问作者Terry T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:48