升级Flutter到2.5.3后List<dynamic>无法赋值给Iterable<Object>报错如何解决
报错原因
该报错是Dart 2.12+版本类型检查规则收紧导致的,Flutter 2.5.3内置的Dart SDK版本≥2.14,对泛型类型的匹配校验更严格:
- 构造函数中声明的参数
List prop = const []没有指定泛型类型,Dart会默认推断为List<dynamic>类型 - 类成员
_prop的声明类型是List<Object>,它的addAll方法要求入参为Iterable<Object>类型 List<dynamic>和Iterable<Object>不属于兼容的泛型类型,因此直接传参会触发类型校验报错
修复方案
有两种常用的修复方式,可根据业务场景选择:
- 方案1:给构造函数参数指定明确的泛型类型,从源头保证类型匹配
修改构造函数的参数声明即可:
EnvironmentState([List<Object> prop = const []]) { this._prop.addAll(prop); }
- 方案2:传参时做类型转换,兼容无泛型的入参场景
如果需要允许外部传入无泛型的List类型参数,可以在调用addAll时用cast方法做类型转换:
EnvironmentState([List prop = const []]) { this._prop.addAll(prop.cast<Object>()); }
注意:方案2不会对列表内的元素做运行时强校验,优先推荐使用方案1保证类型安全。
内容的提问来源于stack exchange,提问作者Tharindu Lakshan
相关产品推荐
相关产品推荐

