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

