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

Flutter读写JSON文件出现_InternalLinkedHashMap类型不匹配报错求解

错误产生原因

Dart的json.decode方法解析JSON字符串后,返回的默认类型是Map<String, dynamic>(因为JSON结构的值可能是字符串、数字、布尔、数组等任意类型,解析阶段无法确定具体值类型,所以统一标记为dynamic类型)。而你的代码中fileContent、jsonFileContent都声明为Map<String, String>类型,直接把Map<String, dynamic>赋值给Map<String, String>变量会触发类型不匹配的报错。

你代码里一共有3处触发该错误的逻辑:

  • initState中读取本地JSON后给fileContent赋值的代码
  • writeFile方法中读取JSON赋值给jsonFileContent的代码
  • writeFile末尾setState时给fileContent赋值的代码
解决方法

有两种可选方案,根据你的业务需求选择即可:

方案1:显式做类型转换(推荐,匹配你现有代码的类型声明)

如果你能确定本地存储的JSON所有值都是字符串类型,直接用Map<String, String>.from()对json.decode的返回结果做类型转换即可,修改三处出错的代码:

  1. initState部分修改为:
if (fileExists)
  this.setState(
      () => fileContent = Map<String, String>.from(json.decode(jsonFile.readAsStringSync())));
  1. writeFile中读取JSON部分修改为:
Map<String, String> jsonFIleContent =
    Map<String, String>.from(json.decode(jsonFile.readAsStringSync()));
  1. writeFile末尾setState部分修改为:
this.setState(() => fileContent = Map<String, String>.from(json.decode(jsonFile.readAsStringSync())));

注意:如果转换时报类型错误,说明你的JSON里存在非字符串类型的值,可根据实际值的类型调整Map的泛型声明。

方案2:调整变量类型声明

如果你后续可能存储非字符串类型的JSON值,直接把变量的类型修改为Map<String, dynamic>即可,不需要做额外转换:

// 把原来的Map fileContent = <String, String>{}; 改成:
Map<String, dynamic> fileContent = {};
// 同时把writeFile里的jsonFileContent类型也改成Map<String, dynamic>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:21:02