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

Flutter调用API获取长字符串时应用卡顿无响应求助

问题描述

数据库中存储了一段约1042字符的长字符串,调用API获取该内容时出现如下差异:

  • 在Postman中发起请求,可正常获取完整响应
  • 在Flutter项目中调用相同接口,应用直接冻结卡顿,控制台无任何错误输出

关联的Flutter请求代码:

@override
Future<ResponseAPI> getPrivacyPolicy() async {
  try {
    Dio http = await dio();
    Response response = await http.get("/setting/type", queryParameters: {
      "type": 7,
    });

    final data = response.data;
    return ResponseAPI.fromJson(data);
  } on DioException catch (e) {
    if (e.response?.statusCode == 403) {
      return ResponseAPI(
        message: e.response?.data['message'],
        statusCode: 403,
      );
    } else {
      return const ResponseAPI(
        message: "出现异常,请稍后重试",
        statusCode: 500,
      );
    }
  } catch (e) {
    return const ResponseAPI(
      message: "出现异常,请稍后重试",
      statusCode: 500,
    );
  }
}

Postman响应截图:
Postman响应示例

排查与解决建议

  • 定位卡顿核心环节
    先注释掉return ResponseAPI.fromJson(data),改成直接打印response.data并返回空模型,验证应用是否还卡顿。如果不再卡顿,说明问题出在JSON转模型的解析逻辑上:

    • 检查ResponseAPI的fromJson方法,尤其是对应长字符串的字段,是否存在循环引用、无限递归(比如某个字段的解析调用了自身的fromJson方法)
    • 确认模型字段和API返回的JSON结构完全匹配,避免因字段不匹配导致解析过程中出现死循环
  • 检查UI线程阻塞情况
    确认调用getPrivacyPolicy()的地方是否在UI线程同步执行了耗时操作:

    • 比如在setState里直接等待Future完成,或者没有用async/await正确处理异步逻辑,导致UI线程被卡死
    • 建议用FutureBuilder处理异步请求的UI渲染,或者在initState中异步调用接口,避免阻塞UI
  • 调整Dio响应处理方式
    可能是Dio默认的响应解析编码和API返回不匹配,导致长字符串解析卡顿。可以尝试强制指定响应类型为纯文本后再手动解析:

    Response response = await http.get("/setting/type", 
      queryParameters: {"type": 7},
      options: Options(responseType: ResponseType.plain)
    );
    // 手动解析JSON
    final data = jsonDecode(response.data);
    return ResponseAPI.fromJson(data);
    
  • 开启Dio日志排查
    添加日志拦截器,查看请求和响应的完整流程,确认卡顿发生在哪个阶段:

    // 在初始化Dio时添加日志拦截器
    http.interceptors.add(LogInterceptor(responseBody: true, requestBody: true));
    

内容的提问来源于stack exchange,提问作者Ikhsan Arfian Nugraha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:04:53