Из Дартского языкового тура :
Примечание: переменные экземпляра могут быть final
, но не const
.Конечные переменные экземпляра должны быть инициализированы до начала тела конструктора - при объявлении переменной, параметром конструктора или в списке инициализатора конструктора .
И в разделе списков инициализатораговорит:
Помимо вызова конструктора суперкласса, вы также можете инициализировать переменные экземпляра до запуска тела конструктора.Разделяйте инициализаторы запятыми.
// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map<String, num> json)
: x = json['x'],
y = json['y'] {
print('In Point.fromJson(): ($x, $y)');
}
Таким образом, общий способ заключается в использовании списков инициализации.
Как упоминалось выше, вы также можете инициализировать при объявлении переменной:
class Foo {
final x = 42;
}
или можете инициализировать их параметром конструктора:
class Foo {
final x;
Foo(this.x);
}
, хотя эти другие подходы не всегда могут быть применимы.