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

Flutter json_serializable解析云函数返回数据时出现Map类型不匹配错误

问题修复方案

问题原因

你遇到的类型不一致问题,是云函数SDK通过平台通道回传数据到Dart层时泛型约束丢失导致的:

  • 打印runtimeType时Dart做了隐式的向上类型推断,所以显示为_InternalLinkedHashMap<String, dynamic>
  • 实际运行时该Map的泛型约束为<Object?, Object?>,传到要求Map<String, dynamic>参数的fromJson方法时,严格的类型校验就会抛出转换失败的错误

你之前写的GameModel _gameData = result.data;本身存在类型错误:result.data是Map类型,不能直接赋值给GameModel类型的变量,删掉这段错误写法即可。

修复方法

方案1:使用Map的cast方法显式转换(推荐)

直接对返回的Map做泛型强转,性能损耗最小:

print(result.data);
print(result.data.runtimeType);
// 先显式把Map转为Map<String, dynamic>
final Map<String, dynamic> json = Map<String, dynamic>.from(result.data);
GameModel _incomingGame = GameModel.fromJson(json);

方案2:序列化后再反序列化(兼容特殊场景)

如果方案1不生效,说明Map内部嵌套的子项也存在泛型丢失问题,可以通过JSON序列化反序列化的流程强制重置泛型约束:

import 'dart:convert';

final jsonString = jsonEncode(result.data);
final Map<String, dynamic> json = jsonDecode(jsonString);
GameModel _incomingGame = GameModel.fromJson(json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:24:03