Flutter中FeatureClass类无法添加列表元素,报错‘Constructors must match enclosing class name’
解决你的Flutter Dart类初始化错误
首先,咱们来拆解你遇到的问题:错误提示“Constructors must match enclosing class name”本质是因为你调用构造函数的语法完全不符合Dart规则,同时你在类的直接作用域里执行列表添加操作也是不允许的。下面是具体的修正方案:
问题点分析
- 构造函数调用语法错误:你用了类似
FeatureClass { FeatureID = 1, ... }这种其他语言的对象初始化器写法,但Dart里没有这种语法。你的类构造函数定义是FeatureClass(this.isChecked, this.head, this.id),必须按照参数顺序传值(或者改成命名参数更清晰)。 - 列表操作位置错误:你不能直接在类的顶层代码里调用
featureClassesList.add(...),这类执行语句必须放在函数、构造函数或者初始化逻辑块里。
修正后的完整代码
class FeatureClass { String head; int id; bool isChecked; // 先初始化空列表作为成员变量 List<FeatureClass> featureClassesList = []; // 基础构造函数:按参数顺序接收值 FeatureClass(this.isChecked, this.head, this.id); // 方案1:带默认列表的构造函数,适合静态固定的列表数据 FeatureClass.withDefaultList() : isChecked = false, head = "", id = 0 { // 在构造函数体内添加列表元素 featureClassesList.add(FeatureClass(false, "F1", 1)); featureClassesList.add(FeatureClass(false, "F1", 1)); featureClassesList.add(FeatureClass(false, "F2", 2)); } // 方案2:单独写初始化方法,外部按需调用 void initFeatureList() { featureClassesList.clear(); // 清空避免重复添加 featureClassesList.add(FeatureClass(false, "F1", 1)); featureClassesList.add(FeatureClass(false, "F1", 1)); featureClassesList.add(FeatureClass(false, "F2", 2)); } }
额外优化建议
如果你觉得按位置传参容易搞混顺序,可以把构造函数改成命名参数,可读性更强:
// 命名参数构造函数(required确保参数必填) FeatureClass({required this.isChecked, required this.head, required this.id}); // 调用时可以明确指定参数,不容易出错 featureClassesList.add(FeatureClass(isChecked: false, head: "F1", id: 1));
使用示例
// 方式1:使用带默认列表的构造函数 var feature = FeatureClass.withDefaultList(); print(feature.featureClassesList.length); // 输出3 // 方式2:用基础构造函数创建实例,再调用初始化方法 var anotherFeature = FeatureClass(false, "Test", 0); anotherFeature.initFeatureList(); print(anotherFeature.featureClassesList.length); // 输出3
这样修改后,你之前的错误就会完全解决,代码也符合Dart的语法规范啦。
内容的提问来源于stack exchange,提问作者That Guy
相关产品推荐
相关产品推荐

