Flutter拉取新闻API解析报错:_InternalLinkedHashMap不是List<dynamic>子类型
错误原因
你使用的stockdata新闻API返回的响应根结构为Map类型,代码中直接将json.decode结果强转为List触发了类型不匹配错误。
修复方案
修改getNews方法的JSON解析逻辑
接口的新闻列表存储在根Map的data字段中,需要先提取该字段再做转换,修复后代码:
Future<List<News>> getNews() async { final response = await http.get(Uri.parse( 'https://api.stockdata.org/v1/news/all?&filter_entities=true&language=en&api_token=api_token&countries=in')); if (response.statusCode == 200) { Map<String, dynamic> rootJson = json.decode(response.body); // 提取新闻列表字段,空值 fallback 为空列表避免异常 List jsonResponse = rootJson["data"] ?? []; return jsonResponse.map((data) => News.fromJSON(data)).toList(); } else { throw Exception('Unexpected error occurred!'); } }
补充检查
确认页面initState中已初始化futureData,避免FutureBuilder一直停在加载状态:
@override void initState() { super.initState(); futureData = getNews(); }
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

