了解概念
最低 Dart 语言版本 3.13。
作用:在类头部一行同时声明字段 + 主构造函数,大幅消除样板代码,运行时行为与传统构造完全一致,仅语法简化。
- Declaring parameters(声明型参数):头部参数带
var/final→ 自动生成同名实例字段。 - Non-declaring parameters(普通参数):头部参数无
var/final→ 仅构造入参,不生成类字段。 - In-body constructors(体内构造函数):写在类大括号内部的命名/工厂/重定向构造。
- 强制规则:拥有主构造的类,不能存在其他非重定向生成构造,保证所有实例必经主构造。
传统写法对比主构造简写
// 传统写法(冗余)
class Point {
int x;
int y;
Point(this.x, this.y);
}
// 主构造简写
class Point(var int x, var int y);Code language: JavaScript (javascript)
字段自动生成规则
1. 带 var / final
自动创建实例字段
直接在类名后面的括号里面写字段变量
// x、y 自动成为类的成员变量
class Point(var int x, final int y);
void main() {
final p = Point(10, 20);
print(p.x); // 10
print(p.y); // 20
// p.y = 30; // 报错,y 是 final
}Code language: JavaScript (javascript)
以上执行后报错
D:\dartdemo\firstdart\bin>dart run
Building package executable...
Failed to build firstdart:firstdart:
firstdart.dart:2:13: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^^^
firstdart.dart:2:12: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^
firstdart.dart:2:36: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);Code language: JavaScript (javascript)
原因是:class Point(var int x, final int y); 这种主构造器简写(Primary Constructors) 是 Dart 的实验性功能,当前稳定版 Dart 默认关闭,所以直接运行会报语法错误。
当前时间是2026年7月10日 14点55分,读者可能阅读本篇文章的时候,dart已经正式发布新版本,默认就支持此语法也不定。
可以用这样来临时测试
dart run --enable-experiment=primary-constructors

2. 无 var / final
仅临时参数,不生成字段
class User(String name) {
// print(name); // 类内部直接访问参数,不会生成 this.name 字段
final String msg = "Hi $name"; //编译错误
}
void main() {
final u = User("Tom");
// print(u.name); // 编译报错,不存在 name 字段
}Code language: JavaScript (javascript)
Previous: 构造函数
Next: Method(方法)