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

Flutter类型转换错误:_InternalLinkedHashMap无法转为List问题

Flutter类型转换错误解决:_InternalLinkedHashMap<String, dynamic> 无法转为 List

错误信息

出现类型转换错误:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast,错误触发在代码中的getData as List语句处。

API响应数据

{
    "message": null,
    "data": {
        "items": [
            {
                "dealerId": 634,
                "dealerName": "Test12",
                "dealerCode": "dandasn123"
            },
            {
                "dealerId": 36,
                "dealerName": "Saurabh",
                "dealerCode": "ASDF"
            },
            {
                "dealerId": 38,
                "dealerName": "Muskan",
                "dealerCode": "ASDF"
            },
            {
                "dealerId": 16,
                "dealerName": "Nsj94",
                "dealerCode": "ASDF1234"
            }
        ]
    },
    "type": null
}

生成的Model类

DealerDetailsModel

import 'Data.dart';

class DealerDetailsModel {
  DealerDetailsModel({
    this.message,
    this.data,
    this.type,
  });

  DealerDetailsModel.fromJson(dynamic json) {
    message = json['message'];
    data = json['data'] != null ? Data.fromJson(json['data']) : null;
    type = json['type'];
  }
  dynamic message;
  Data? data;
  dynamic type;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['message'] = message;
    if (data != null) {
      map['data'] = data?.toJson();
    }
    map['type'] = type;
    return map;
  }
}

Data

import 'Items.dart';

class Data {
  Data({
    this.items,
  });

  Data.fromJson(dynamic json) {
    if (json['items'] != null) {
      items = [];
      json['items'].forEach((v) {
        items?.add(Items.fromJson(v));
      });
    }
  }
  List<Items>? items;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    if (items != null) {
      map['items'] = items?.map((v) => v.toJson()).toList();
    }
    return map;
  }
}

Items

class Items {
  Items({
    this.dealerId,
    this.dealerName,
    this.dealerCode,
  });

  Items.fromJson(dynamic json) {
    dealerId = json['dealerId'];
    dealerName = json['dealerName'];
    dealerCode = json['dealerCode'];
  }
  int? dealerId;
  String? dealerName;
  String? dealerCode;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['dealerId'] = dealerId;
    map['dealerName'] = dealerName;
    map['dealerCode'] = dealerCode;
    return map;
  }
}

出错的经销商详情获取方法

Future<List<DealerDetailsModel>> getDealerDetails() async {
    var params = {'': ''};
    if (isNetworkAvail) {
      await apiBaseHelper.getAPICall(getDealerDetailsData, params).then(
            (getData) async => {
              dealerData = (getData as List)
                  .map((data) => DealerDetailsModel.fromJson(data))
                  .toList(),
            },
          );
    }
    return dealerData;
  }

解决方法

问题根源

API返回的是单个JSON对象(Map结构),而非数组(List),但你错误地将返回结果强转为List类型,导致类型不匹配。

修改后的代码

根据需求,有两种修改方式:

方式1:返回经销商列表(List)

如果你的目标是获取items里的经销商数据,直接解析整个响应对象后提取列表:

Future<List<Items>?> getDealerDetails() async {
    var params = {'': ''};
    List<Items>? dealerData;
    if (isNetworkAvail) {
      final response = await apiBaseHelper.getAPICall(getDealerDetailsData, params);
      // 解析整个响应为DealerDetailsModel对象
      final dealerModel = DealerDetailsModel.fromJson(response);
      // 提取items列表
      dealerData = dealerModel.data?.items;
    }
    return dealerData;
  }

方式2:返回完整的DealerDetailsModel对象

如果需要保留整个响应的结构(包含message、data、type),调整方法返回值并直接解析:

Future<DealerDetailsModel?> getDealerDetails() async {
    var params = {'': ''};
    DealerDetailsModel? dealerModel;
    if (isNetworkAvail) {
      final response = await apiBaseHelper.getAPICall(getDealerDetailsData, params);
      dealerModel = DealerDetailsModel.fromJson(response);
    }
    return dealerModel;
  }

核心说明

你的Model类已经正确匹配了API的响应结构,不需要将顶层响应转为List。直接调用DealerDetailsModel.fromJson(response)即可完成解析,后续按需提取内部的items列表或其他字段。

内容的提问来源于stack exchange,提问作者Rudransh Singh Mahra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:10:46