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

