Dart:如何将_InternalLinkedHashMap对象添加到List<dynamic>并适配DataModel
问题解决方案
报错原因说明
报错
Cannot add _InternalLinkedHashMap<String, dynamic> to a List<dynamic>本质是你声明的List泛型和待添加的元素类型不匹配,同时你需要先将Map结构转成DataModel实体,再存入对应泛型的List中,才能避免类型错误。
具体实现步骤
1. 定义对应结构的DataModel类
编写带fromJson转换方法的实体类:
class CustomDataModel { final String url; final int id; final String? deviceId; final List<dynamic> requiredConsents; CustomDataModel({ required this.url, required this.id, this.deviceId, required this.requiredConsents, }); // 从Map转实体的工厂方法 factory CustomDataModel.fromJson(Map<String, dynamic> json) { return CustomDataModel( url: json['url'] as String, id: json['id'] as int, deviceId: json['deviceId'] as String?, requiredConsents: json['requiredConsents'] as List, ); } }
2. 声明对应泛型的目标List
// 错误声明示例(会触发类型不匹配报错) // List<dynamic> targetList = []; // 正确声明示例,泛型指定为DataModel类型 List<CustomDataModel> dataList = [];
3. 解码JSON转实体后存入List
import 'dart:convert'; // 假设responseBody为接口返回的JSON字符串 Map<String, dynamic> decodedMap = jsonDecode(responseBody); // 转成DataModel实体 CustomDataModel model = CustomDataModel.fromJson(decodedMap); // 存入目标List dataList.add(model);
4. ListView.builder渲染示例
ListView.builder( itemCount: dataList.length, itemBuilder: (context, index) { final currentItem = dataList[index]; return ListTile( title: Text(currentItem.url), subtitle: Text('ID: ${currentItem.id}'), ); } )
内容的提问来源于stack exchange,提问作者Vasil Test
相关产品推荐
相关产品推荐

