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

Flutter加载assets JSON报错Expected a value of type 'Item'如何解决

问题修复方案

报错根源

你的loadData方法里存在一行冗余的错误赋值代码,触发了类型不匹配报错:
你先把CatalogModel.items = List.from(productData);这行直接删除即可。
原因:productData是JSON解码后得到的原始_JsonMap类型数组,你直接将它赋值给了声明为List<Item>类型的CatalogModel.items,类型不匹配直接触发崩溃,后续的类型转换代码还没来得及执行就已经抛出异常。

修复后的loadData代码

loadData() async {
    var catalogJson = await rootBundle.loadString("assets/files/catalog.json");
    final decodeData = jsonDecode(catalogJson);
    var productData = decodeData["products"];
    CatalogModel.items = List.from(productData).map<Item>((item) => Item.fromMap(item)).toList();
    setState(() {});
}

其他注意事项

  • 注意JSON文件名的大小写,你原有代码里写的是catalog.Json,如果实际文件后缀是小写.json会报资源找不到错误,建议统一改成小写catalog.json
  • 确认pubspec.yaml里已经正确配置了assets资源路径:
flutter:
  assets:
    - assets/files/
  • 如果你的JSON里price字段是浮点型,Item.fromMap里的price: map["price"] as int会报错,可以改成price: map["price"] as num适配int和double两种类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:15:01