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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:15:04