Flutter Dart类型错误:期望List<C>却获List<dynamic>问题排查
问题分析:List类型不匹配错误
代码场景
定义的类结构如下:
类C
class C { int? first; int? second; C({ this.first, this.second, }); }
继承类A和B
class A { int? id; List<C>? list; A({ this.id, this.list, }); } class B extends A{ String? title; B({ this.title, list, }):super( list: list, ); }
执行以下代码创建B实例时出现错误:
B b = B(title: '', list: []);
错误提示:expected value of Type List<C> but got one of type List<dynamic>
问题根源
- 直接传入的
[]在Dart中默认是List<dynamic>类型,但父类A的list参数要求的是List<C>?,类型不匹配导致报错。 - 子类
B的构造函数中,list参数未显式声明类型,默认被推断为dynamic,传递给父类时无法自动转换为List<C>。
解决办法
方案1:创建实例时显式指定列表类型
在创建空列表时,明确标注类型为List<C>:
B b = B(title: '', list: <C>[]);
方案2:给子类B的构造函数参数添加类型约束
修改B的构造函数,为list参数指定明确的类型,让Dart在编译阶段就进行类型检查:
class B extends A{ String? title; B({ this.title, List<C>? list, // 显式声明类型 }):super( list: list, ); }
修改后,再使用list: []创建实例时,Dart会自动推断该列表为List<C>类型,不会再触发类型错误。
内容的提问来源于stack exchange,提问作者Mohad Hadi
相关产品推荐
相关产品推荐

