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

Flutter类型转换错误:_Map<String,dynamic>无法转为String问题排查

错误原因分析

你遇到的CastError是因为将_Map<String, dynamic>类型的值赋值给了期望String类型的字段。具体看代码里的这一行:

id: jsonList[key],

API返回的jsonList[key]是一个完整的货币信息对象(Map类型),但你的Currency类的id字段应该是字符串类型(比如货币代码,也就是循环里的key值,比如"usd"、"eur"这类),把Map赋值给String类型的字段自然会触发类型转换错误。

修复方案
  1. 修正id字段的赋值:把id: jsonList[key]改成id: key,因为循环的key就是每个货币的唯一标识(字符串类型),符合id字段的类型要求。
  2. 添加类型注解规范代码:给变量加上明确的类型注解,避免类型推断带来的潜在问题。

修改后的完整代码片段:

class _HomeState extends State<Home> {
  // 明确指定列表类型为Currency
  List<Currency> currency = [];

  Future getResponse(BuildContext context) async {
    var url = "http://api.navasan.tech/latest/?api_key=freeTFyHoFiXvgG6UNOlQHfehDasa7eK";
    var response = await http.get(Uri.parse(url));
    developer.log(response.body, name: 'main');
    developer.log('getResponse', name: 'wlifecycle');

    if (currency.isEmpty) {
      if (response.statusCode == 200) {
        _showSnackBar(context, 'به روز رسانی با موفقیت انجام شد .');
        developer.log(response.body, name: 'getResponse', error: convert.jsonDecode(response.body));
        // 明确指定Map的类型
        Map<String, dynamic> jsonList = convert.jsonDecode(response.body);
        if (jsonList.isNotEmpty) {
          jsonList.forEach((key, value) {
            setState(() {
              currency.add(Currency(
                  id: key, // 这里改为key,对应字符串类型的货币代码
                  value: value["value"], // 直接用循环里的value,不用jsonList[key]
                  change: value["change"],
                  timestamp: value['timestamp'],
                  date: value["date"]));
            });
          });
        }
      }
    }
    return response;
  }
}

另外,循环里的value就是当前key对应的Map对象,直接用value["xxx"]比jsonList[key]["xxx"]更简洁高效。

额外建议
  • 确保你的Currency类的各个字段类型和API返回的字段类型匹配,比如value、change可能是num类型,timestamp是int类型,date是String类型。
  • 可以使用json_serializable库来自动解析JSON,减少手动解析的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:05:23