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

解决Flutter与Swift消息通道中数组和字典的类型转换错误

解决Flutter与Swift通道间字典数组的类型转换错误

问题核心是跨平台通道传递时,Swift的泛型类型信息会被擦除,导致Dart端收到的是List<Object>(本质为List<dynamic>),无法直接强转为List<Map<String, int>>。以下是两种可行的解决方法:

方法一:手动遍历转换类型

在Dart端将返回的列表逐个元素转换为目标类型:

final dynamic rawResult = await methodChannel.invokeMethod('myCustomFunc');
final List<Map<String, int>> resultList = (rawResult as List)
    .map((item) => item as Map<String, int>)
    .toList();

方法二:使用cast方法快速转换

利用Dart集合的cast方法直接将列表转换为目标泛型类型:

final dynamic rawResult = await methodChannel.invokeMethod('myCustomFunc');
final List<Map<String, int>> resultList = (rawResult as List).cast<Map<String, int>>();

补充说明

Swift端代码无需修改,因为通道传递时原生的[[String: Int]]确实会被转换为Dart的列表结构,但泛型信息无法跨平台保留,必须在Dart端显式处理类型转换,避免直接使用invokeMethod<List<Map<String, int>>>这类强类型调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:25:22