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

Flutter类型不匹配错误:(dynamic)=>ProductModel不符合transform参数类型

解决类型不匹配问题:正确转换API响应为List

错误根源

你当前代码直接对整个API响应对象(response.data是包含status/message/data的Map)调用map方法,但Map的map方法要求回调函数接收**键值对(String, dynamic)**并返回MapEntry,而你传入的是接收单个dynamic对象返回ProductModel的回调,导致类型不匹配。

修正步骤

  1. 先从API响应中取出真正的商品列表数组:response.data['data']
  2. 移除不必要的e.toMap():API返回的每个商品项本身就是Map<String, dynamic>,无需额外转换
  3. 添加类型断言确保类型安全,避免dynamic隐式转换问题

修改后的代码

Future<List<ProductModel>> getProducts() async {
    try {
      final response = await apiService.sendRequest.get('/product');
      if (response.data != null && response.data['data'] != null) {
        print("Data == $response");
        // 先取出data数组,再逐个转换为ProductModel
        final List<dynamic> productList = response.data['data'];
        return productList
            .map((e) => ProductModel.fromJson(e as Map<String, dynamic>))
            .toList();     
      }
      return <ProductModel>[];
    } catch (ex) {
      rethrow;
    }
  }

额外注意事项

  • 检查ProductModel中的id字段:如果API返回的是字符串格式的ObjectId,需要用ObjectId.fromHexString(json["_id"])转换,直接赋值json["_id"]会导致类型错误
  • 确保Image类的fromJson方法能正确解析API返回的图片数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:05:19