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

Flutter TypeError问题求助:Map<String,dynamic>无法转为List<dynamic>

解决Flutter中_TypeError: '_Map<String, dynamic>' is not a subtype of type 'List'错误

错误原因

你遇到的类型不匹配错误,核心问题是API返回的是单个JSON对象(用{}包裹),但你的代码里尝试将其解析为List<dynamic>(数组,用[]包裹),两种数据类型无法直接转换,因此抛出类型错误。从你提供的API响应示例也能明确看到,返回的是单个完整对象而非对象数组。

解决方案

我们需要修改数据解析逻辑,适配单个对象的返回格式,同时提取你需要的嵌套字段(town、username等),并处理空安全避免潜在报错:

1. 修改fetchData方法

将原本解析数组的逻辑改为解析单个对象,提取目标字段后包装为List(适配后续DataTable的批量渲染逻辑):

Future<List<Map<String, dynamic>>> fetchData() async {
  final token = await _authService.getToken();

  final response = await http.get(
    Uri.parse('$apiUrl/table'),
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer $token',
    },
  );

  if (response.statusCode == 200) {
    // 解析API返回的单个JSON对象
    final Map<String, dynamic> rawData = jsonDecode(response.body);
    
    // 提取需要的字段,处理嵌套结构与空安全
    final Map<String, dynamic> processedRow = {
      'id': rawData['id'],
      // 从coordinator对象中提取username,为空时显示N/A
      'username': rawData['coordinator']?['username'] ?? 'N/A',
      // 从多层嵌套中提取town,为空时显示N/A
      'town': rawData['workObject']?['consumingFacility']?['address']?['town'] ?? 'N/A',
      'priority': rawData['priority']?.toString() ?? 'N/A',
    };

    // 将单个对象包装为List,适配DataTable的rows.map逻辑
    return [processedRow];
  } else {
    throw Exception('Failed to load data');
  }
}

2. 验证DataTable渲染

修改后,FutureBuilder中获取的data是包含单个处理后对象的List,DataTable会正常渲染一行数据。如果后续API改为返回对象数组(即[]包裹的多个对象),你只需将解析逻辑改回原本的数组解析即可:

final List<dynamic> data = jsonDecode(response.body);
return data.map((item) {
  // 对每个item执行上述字段提取逻辑
  return {
    'id': item['id'],
    'username': item['coordinator']?['username'] ?? 'N/A',
    'town': item['workObject']?['consumingFacility']?['address']?['town'] ?? 'N/A',
    'priority': item['priority']?.toString() ?? 'N/A',
  };
}).toList();

关键注意点

  • 空安全处理:使用?.可选链访问嵌套字段,避免因某个层级字段为null导致崩溃;用??设置默认值,保证UI显示的完整性。
  • API格式确认:如果预期API返回多个数据,需确认请求的端点是否正确,是否应该返回数组格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:06:22