如何在Dart构造函数中设置final/const属性

如何在Dart构造函数中设置final/const属性,dart,constructor,properties,final,Dart,Constructor,Properties,Final,我有一个具有不可变属性int id的类。 如何将id的值传递给构造函数 class Hey { var val; final int id; Hey(int id,var val) { this.id=id; this.val=val; } } void main() { Hey hey=new Hey(0,1); } 嘿。dart:10:10:错误:找不到Setter:'id'。 这个.id=id; ^^hey.dart:10:10:错误:没有为类“

我有一个具有不可变属性int id的类。 如何将id的值传递给构造函数

class Hey
{
  var val;
  final int id;
  Hey(int id,var val)
  {
    this.id=id;
    this.val=val;
  }
}

void main()
{
  Hey hey=new Hey(0,1);
}
嘿。dart:10:10:错误:找不到Setter:'id'。 这个.id=id; ^^hey.dart:10:10:错误:没有为类“hey”定义setter“id”。 -“嘿”来自“嘿,达特”。尝试将名称更正为现有setter的名称,或定义名为“id”的setter或字段。 这个.id=id; ^^

我认为const或final字段属性不需要setter。 API不清楚如何处理此问题。

来自:

注意:实例变量可以是
final
,但不能是
const
。最终实例变量必须在构造函数主体启动之前初始化-在变量声明处、通过构造函数参数或在构造函数的

关于初始值设定项列表的部分说:

除了调用超类构造函数外,还可以在构造函数体运行之前初始化实例变量。用逗号分隔初始值设定项

//初始值设定项列表在
//构造函数主体运行。
fromJson(映射json)
:x=json['x'],
y=json['y']{
print('In Point.fromJson():($x,$y)');
}
因此,一般的方法是通过初始化列表

如上所述,您还可以在变量声明时初始化:

class-Foo{
最终x=42;
}
或者可以通过构造函数参数对其进行初始化:

class-Foo{
最后的x;
Foo(this.x);
}
尽管这些其他方法可能并不总是适用