Flutter类型不匹配错误:_InternalLinkedHashMap无法转为List的排查修复
错误原因及修复方案:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' 错误原因
你的API服务代码与Django API返回的数据结构完全不匹配:
- 服务代码中写了
final List result = jsonDecode(response.body)['data'];,错误地将API返回的Map类型的data字段当成List来处理; - 你的
ProductModel是对应整个API响应的结构(包含status和data两个顶级字段),而非单个产品的结构,但服务代码却试图把data内容转成List<ProductModel>,完全违背了Model的设计逻辑。
修复步骤
1. 修正API服务的解析逻辑
将getProducts的返回类型从Future<List<ProductModel>>改为Future<ProductModel?>,按照Model定义的结构解析整个响应:
修改后的API服务代码:
import 'dart:convert'; import 'package:http/http.dart'; import 'products_model.dart'; class ProductsRepository { String baseUrl = "example.com"; Future<ProductModel?> getProducts() async { Response response = await get(Uri.parse(baseUrl)); try { if (response.statusCode == 200) { // 直接解析整个响应为ProductModel实例 final Map<String, dynamic> jsonResponse = jsonDecode(response.body); return ProductModel.fromJson(jsonResponse); } else { throw Exception(response.reasonPhrase); } } catch (e) { print(e.toString()); return null; } } }
2. 正确获取产品列表数据
修复后,你需要从ProductModel的嵌套结构中取出实际的产品列表:
final productRepo = ProductsRepository(); final productModel = await productRepo.getProducts(); if (productModel != null && productModel.data?.products?.results != null) { List<Results> productList = productModel.data!.products!.results!; // 在这里处理产品列表数据 }
内容的提问来源于stack exchange,提问作者Mozammel Hoshen Chowdhury
相关产品推荐
相关产品推荐

