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
相关产品推荐
相关产品推荐

