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

Flutter报错NoSuchMethodError:空对象调用map方法数据解析失败

问题原因
  1. 核心报错来自数据模型的GetSampah.fromMap解析逻辑:代码直接对json["result"]调用map方法,当接口返回的result字段为null时,null对象不存在map方法,就会抛出你遇到的报错。
  2. 代码中存在多处强制解包可空字段的隐患:比如UI层监听con.resSampah时直接用value.result!、数据模型toMap方法直接用result!.map,当对应字段为null时都会触发空异常。
  3. UI层的列表刷新逻辑存在错误:原有逻辑判断_listSampah不为空时仅清空列表,不加载新数据,会导致后续刷新无法拿到最新数据。
修复方案

1. 修复数据模型的空安全问题

修改GetSampah类的fromMap和toMap方法,对可空的result字段做兼容处理:

factory GetSampah.fromMap(Map<String, dynamic> json) => GetSampah(
      hasil: json["hasil"],
      // 新增null判断,result为null时返回空数组
      result: json["result"] == null ? [] : List<Result>.from(json["result"]!.map((x) => Result.fromMap(x))),
    );

Map<String, dynamic> toMap() => {
      "hasil": hasil,
      // 新增null判断,result为null时返回空数组
      "result": result == null ? [] : List<dynamic>.from(result!.map((x) => x.toMap())),
    };

2. 修复UI层的监听逻辑

修改initState中con.resSampah的监听代码,删除错误的列表判断逻辑,新增非空判断:

con.resSampah.listen((value) {
  // 先对result做非空兼容,null时用空数组替代
  final resultList = value.result ?? [];
  for (var i = 0; i < resultList.length; i++) {
    qtyList.add(0);
    postDetail.add(0);
    namaSampah.add(0);
    hargaSetor.add(0);
    totalHarga.add(0);
  }

  if (mounted) {
    setState(() {
      _listSampah.clear();
      _listSampah.addAll(resultList);
      _listSearch = _listSampah;
    });
  }
});

3. 可选优化(避免其他潜在报错)

修复搜索功能不生效的问题

修改TextField的onChanged逻辑,过滤后的值要赋值给_listSearch同时触发刷新:

onChanged: (value) {
  setState(() {
    _listSearch = _listSampah.where((element) {
      final sampah = element.nama?.toLowerCase() ?? '';
      return sampah.contains(value.toLowerCase());
    }).toList();
  });
}

兼容总价空数组报错

修改总价显示逻辑,避免totalHarga为空时调用reduce抛出异常:

Text(
  "Rp. ${totalHarga.isEmpty ? 0 : totalHarga.reduce((a, b) => a + b)}",
  style: TextStyle(
      fontSize: 18, fontWeight: FontWeight.bold),
)

内容的提问来源于stack exchange,提问作者Dimas Maulana Firdaus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:06