Flutter使用EventChannel接收Android数据出现类型不匹配报错如何解决
问题根因
通过EventChannel从原生侧传递的复杂嵌套集合,Flutter侧不会自动递归解析泛型,所有层级的集合默认都是dynamic类型。你直接赋值时Dart的泛型校验不允许List<dynamic>直接当做List<Map<String, double>>使用,哪怕元素结构符合要求也会抛出类型不匹配异常。你之前用的cast类方法只会处理当前层级的类型,不会递归转换嵌套元素的泛型,因此不生效。
正确解决代码
你只需要对嵌套的每一层集合做显式类型转换即可:
List<dynamic> t = event; // 逐层转换最后一个元素的泛型 List<Map<String, double>> targetItem = (t.last as List).map((mapItem) { return Map<String, double>.from(mapItem); }).toList(); // 转换完成后再添加到目标列表 convertedList.add(targetItem);
如果你需要将整个返回的event数据完整转换成List<List<Map<String, double>>>类型,可以用如下批量转换逻辑:
List<List<Map<String, double>>> fullConvertedData = (event as List).map((listItem) { return (listItem as List).map((mapItem) { return Map<String, double>.from(mapItem); }).toList(); }).toList();
内容的提问来源于stack exchange,提问作者Blurry12
相关产品推荐
相关产品推荐

