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

Flutter新手在Android Studio运行项目遇类型转换错误求助

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

嘿,刚接触Flutter遇到这种类型不匹配的问题太正常啦!我来帮你快速搞定它~

错误根源

你遇到的这个错误,核心原因是接口返回的JSON数据是一个对象(对应Dart里的Map<String, dynamic>类型),但你却用List类型去接收解析后的结果,类型不匹配自然就报错了。

看你的代码,你写了:

List data = JSON.decode(response.body);
print(data[0]["access_token"]);

这说明你默认认为接口返回的是一个数组(比如[{"access_token": "xxx"}]),但实际接口返回的是一个单独的对象(比如{"access_token": "xxx", "code": 200})。

修复方案

只需要把解析后的类型改成Map,然后直接通过键名获取access_token即可,同时注意现在Flutter推荐使用jsonDecode(来自dart:convert包)替代旧的JSON.decode:

修改后的完整代码:

import 'dart:convert'; // 别忘了导入这个包
import 'package:http/http.dart' as http;

Future<String> getData() async {
  http.Response response = await http.post(
    Uri.parse("https://你的接口地址"), // 推荐用Uri.parse替代Uri.encodeFull
    headers: {
      "Accept": "application/json"
    },
    body: {
      "email": "test123@gmail.com",
      "password": "password123"
    },
  );

  // 把解析类型改成Map
  Map<String, dynamic> data = jsonDecode(response.body);
  // 直接通过键名获取access_token
  print(data["access_token"]);
  
  // 可以根据需求返回对应内容,比如返回token
  return data["access_token"] ?? "";
}

额外调试建议

如果不确定接口返回的JSON结构,建议先打印response.body看看实际内容:

print(response.body);

这样你就能清楚知道返回的是数组还是对象,避免类型匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:36:20