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

Flutter加载API下拉数据报_InternalLinkedHashMap类型不匹配错误

问题原因

运行时抛出type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'异常的核心原因是接口响应解析逻辑错误:
从控制台打印的接口返回结构可以看到,响应最外层是Map类型对象,结构如下:

{
  "Result": "Success",
  "Remarks": "Records Found Successfully",
  "data": [
    {"reason": "DOOR LOCKED"},
    {"reason": "CUSTOMER NOT INTERESTED"},
    // 其余待选原因
  ]
}

你在_getPendingRsn方法中直接将解码后的整个外层Map对象赋值给了声明为List类型的datalist变量,类型不匹配直接触发类型转换异常,DropdownButton拿不到正确的列表数据,自然无法渲染下拉选项。

修复方案
  • 修正接口响应解析逻辑,从响应Map中取出data字段对应的数组,再赋值给datalist,不要直接赋值整个响应对象。修改_getPendingRsn方法内的响应处理代码:
    if (response.statusCode == 200) {
      Map<String, dynamic> responseJson = json.decode(response.body);
      print(responseJson);
      // 取出data字段对应的待选原因列表
      List reasonList = responseJson['data'] as List;
      setState(() {
        datalist = reasonList;
      });
      return "load success";
    }
    
  • 给列表变量指定明确类型,替换原来的列表声明语句:
    // 原代码:List datalist = List();
    List<Map<String, dynamic>> datalist = [];
    
  • 优化下拉组件渲染逻辑,增加空判断、处理返回值多余空格问题,避免渲染异常。修改_dropdownPending的items属性逻辑:
    items: datalist.map((item) {
      // 用trim()去掉接口返回reason值前后的多余空格,避免值匹配异常
      String reasonVal = item['reason'].toString().trim();
      return DropdownMenuItem<String>(
        child: Text(reasonVal),
        value: reasonVal,
      );
    }).toList(),
    
  • 修正方法返回值类型匹配问题:原_getPendingRsn声明返回Future<String>,之前错误返回了Map类型的responseJson,修复后返回字符串状态即可,避免隐式类型错误。

注意点:接口返回的部分reason值首尾带有大量多余空格(比如日志中NO ELECTRICITY WHEN VISITED 尾部的空格),如果不做trim处理,后续下拉框选中值匹配、表单提交时很容易出现非预期问题。

内容的提问来源于stack exchange,提问作者Radhika Ahir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:03:23