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
相关产品推荐
相关产品推荐

