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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:35:48