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

Flutter类型错误:_InternalLinkedHashMap无法转为Iterable的解决请求

问题解决:TypeError 类型不匹配错误

错误原因

你调用的OpenWeatherMap /weather 接口返回的是单个天气对象(对应Dart中的_InternalLinkedHashMap<String, dynamic>),而非数组类型。但代码中直接用for (var eachItem in jsonData)遍历这个对象,HashMap不属于可迭代类型,因此触发类型不匹配错误。

修正代码

直接解析单个对象并添加到列表即可,无需遍历:

var url =
    "https://api.openweathermap.org/data/2.5/weather?q=Izmir&appid=$apikey&units=metric";

List<GetWeather> waitems = [];

Future getItems() async {
  try {
    var response = await http.get(Uri.parse(url));
    if (response.statusCode == 200) {
      var jsonData = jsonDecode(response.body);
      // 直接解析接口返回的单个对象
      final weatherItem = GetWeather(
        weather: jsonData['weather'], // 接口中weather字段本身是数组
      );
      waitems.add(weatherItem);
    } else {
      print('请求失败,状态码: ${response.statusCode}');
    }
  } catch (e) {
    print('处理出错: $e');
  }
}

额外说明

  1. 确认GetWeather类的weather字段类型与接口返回匹配:接口中weather是包含天气信息的数组,所以如果GetWeather的weather参数定义为List<dynamic>或List<Map<String, dynamic>>,就能正确接收数据。
  2. 如果需要批量获取多个城市的天气,可改用OpenWeatherMap的/group接口(该接口返回数组),此时才能用遍历方式处理数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:01:19