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

Flutter报ui_dart_state.cc(199)错误 getter 'length'调用在null上如何解决

错误触发原因

  • 核心触发点是代码中存在空对象调用length属性的逻辑,具体可能的原因按优先级排序如下:
    1. 代码内apiurl被赋值为空字符串,调用Uri.parse(apiurl)生成的Uri对象无效,http库内部执行请求时会校验请求地址长度,空对象调用length直接抛出错误。
    2. email、password两个参数未正确绑定输入框取值逻辑,传入http请求的body时为null,http库处理请求参数时调用length触发报错。
    3. 接口返回的response.body为空,执行json.decode时解析空内容会调用length属性触发报错;或是返回的JSON结构缺少error、success、message字段,取值后为null,后续业务逻辑中用到这些空值的length时抛出错误。

修复方案

  • 第一步:补全有效接口地址,增加地址有效性校验
startLogin() async {
  String apiurl = "替换为你的实际接口地址"; // 补全正确的接口地址,模拟器环境不要用localhost,用本地网卡IP
  if(apiurl.isEmpty || !Uri.parse(apiurl).isAbsolute) {
    setState(() {
      showprogress = false;
      error = true;
      errormsg = "接口地址配置错误";
    });
    return;
  }
  // 原有后续逻辑
}
  • 第二步:请求前增加用户名密码空值校验
// 放在接口请求代码之前
if(email?.isEmpty ?? true || password?.isEmpty ?? true) {
  setState(() {
    showprogress = false;
    error = true;
    errormsg = "用户名或密码不能为空";
  });
  return;
}
  • 第三步:增加接口返回值空安全校验
if(response.statusCode == 200){
  if(response.body.isEmpty) {
    setState(() {
      showprogress = false;
      error = true;
      errormsg = "接口返回内容为空";
    });
    return;
  }
  var jsondata = json.decode(response.body);
  // 校验JSON字段存在性
  if(jsondata["error"] == null || jsondata["success"] == null) {
    setState(() {
      showprogress = false;
      error = true;
      errormsg = "接口返回结构异常";
    });
    return;
  }
  // 原有业务逻辑不变
  if(jsondata["error"]){
    setState(() {
      showprogress = false;
      error = true;
      errormsg = jsondata["message"] ?? "未知错误";
    });
  }
  // ...其余原有代码
}
  • 第四步:开启Flutter空安全校验,给所有变量增加可空标记,编译阶段提前识别空值风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:06