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

Flutter调用MethodChannel返回List<Map>时类型转换错误如何解决?

问题核心原因

MethodChannel 标准编解码器的反序列化逻辑不会保留嵌套类型的泛型信息:原生侧返回的ArrayList<HashMap<String, String>>传递到 Dart 侧时,外层容器会被解析为List<Object?>,内层的 HashMap 会被解析为_InternalLinkedHashMap<Object?, Object?>,无法直接强转为指定嵌套泛型的类型,这是两次报错的根本原因。

两次报错对应说明

  • 调用invokeMethod时直接指定返回泛型为List<Map<String, String>>,Dart 类型系统不允许将List<Object?>直接强转为泛型不匹配的 List 类型,触发第一类报错。
  • 调用invokeListMethod时仅指定了内层元素泛型为Map<String, dynamic>,方法仅会自动转换外层 List 的泛型,内层 Map 仍然是Object?泛型,强转时触发第二类报错。

解决方法

无需额外配置,仅需对返回结果做一层手动类型转换即可,示例代码如下:

// 第一步:先获取无嵌套泛型的原始数据
final List? rawData = await platform.invokeListMethod(
  getTableData,
  <String, String>{'table': selectedTable!},
);

// 第二步:遍历转换内层 Map 的泛型
final List<Map<String, dynamic>>? tableData = rawData?.map((item) {
  return Map<String, dynamic>.from(item as Map);
}).toList();

如果需要严格校验键的类型为 String,也可以增加类型判断逻辑避免原生返回异常结构导致的 crash。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:03