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

如何解决Flutter中'_Map<String,dynamic>'不是produk子类型等类型不匹配异常?

解决Flutter中JSON转自定义Model的类型不匹配错误

第一个错误:_Map<String, dynamic> is not a subtype of type produk

问题原因

直接将Dio返回的JSON Map数据添加到List<produk>列表中,未将Map转换为produk类的实例,类型不匹配导致报错。

解决方案

在produk类中实现fromJson工厂方法,将JSON Map映射为produk实例后再加入列表。

示例Model类(需确保字段与API返回结构匹配):

class Produk {
  final String id;
  final String nama;
  final double harga;

  Produk({required this.id, required this.nama, required this.harga});

  // 核心转换方法
  factory Produk.fromJson(Map<String, dynamic> json) {
    return Produk(
      id: json['id'] ?? '',
      nama: json['nama'] ?? '',
      harga: (json['harga'] ?? 0).toDouble(),
    );
  }
}

修正后的请求处理代码:

List<Produk> daftarProduk = [];

void fetchProduk() async {
  try {
    Response response = await Dio().post('https://your-api-url.com/produk');
    // 将Map转换为Produk实例后加入列表
    Produk produkBaru = Produk.fromJson(response.data);
    daftarProduk.add(produkBaru);
  } catch (e) {
    print(e);
  }
}

第二个错误:List<dynamic> is not a subtype of type List<produk>

问题原因

直接将API返回的List<dynamic>(内部为Map元素)赋值或添加到List<produk>中,未将列表中的每个Map元素转换为produk实例。

解决方案

遍历List<dynamic>中的每个元素,通过fromJson方法逐个转换为produk实例,再生成List<produk>。

修正后的请求处理代码:

List<Produk> daftarProduk = [];

void fetchProdukList() async {
  try {
    Response response = await Dio().post('https://your-api-url.com/produks');
    // 先获取原始动态列表,再逐个转换
    List<dynamic> rawData = response.data;
    daftarProduk = rawData.map((item) => Produk.fromJson(item)).toList();
    // 若需追加到已有列表,使用addAll:
    // daftarProduk.addAll(rawData.map((item) => Produk.fromJson(item)).toList());
  } catch (e) {
    print(e);
  }
}

额外注意事项

  • 确保API返回的JSON结构与fromJson方法中的字段映射一致,若API字段名与Model属性名不同,需手动对应(如API返回product_name,Model用nama,则写nama: json['product_name'] ?? '')
  • 若API返回嵌套结构(如{ "data": [ ... ] }),需先提取数据再处理:List<dynamic> rawData = response.data['data'];
  • 添加空值判断,避免因API返回null导致转换失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:19