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
相关产品推荐
相关产品推荐

