Flutter类型不匹配错误:(dynamic)=>ProductModel不符合transform参数类型
解决类型不匹配问题:正确转换API响应为List
错误根源
你当前代码直接对整个API响应对象(response.data是包含status/message/data的Map)调用map方法,但Map的map方法要求回调函数接收**键值对(String, dynamic)**并返回MapEntry,而你传入的是接收单个dynamic对象返回ProductModel的回调,导致类型不匹配。
修正步骤
- 先从API响应中取出真正的商品列表数组:
response.data['data'] - 移除不必要的
e.toMap():API返回的每个商品项本身就是Map<String, dynamic>,无需额外转换 - 添加类型断言确保类型安全,避免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
相关产品推荐
相关产品推荐

