В черновиках спецификации языка замечена новая интересная фича, которая решает проблему с приватными именами полей, позволяя инициализировать их через именованные аргументы конструктора класса. Ранее это было невозможно, так как Dart запрещал использовать имена параметров, начинающиеся с _ (нижнего подчеркивания) в публичных конструкторах c именованными аргументами. Но теперь все меняется!😄
Если раньше вам нужно было использовать список инициализации:
class House {
int? _windows;
int? _bedrooms;
int? _swimmingPools;
House({
int? windows,
int? bedrooms,
int? swimmingPools,
}) : _windows = windows,
_bedrooms = bedrooms,
_swimmingPools = swimmingPools;
}
То теперь код конструктора сокращается до:
class House {
int? _windows;
int? _bedrooms;
int? _swimmingPools;
House({this._windows, this._bedrooms, this._swimmingPools});
}
А с появлением первичного конструктора такое объявление класса сократится до следующей записи:
class House({
int? _windows,
int? _bedrooms,
int? _swimmingPools,
});
🛠 Как это будет работать на уровне компилятора?
Компилятор будет автоматически «удалять» подчеркивание из параметра, но для поля, инициализированного этим параметром, оно останется приватным. Это позволит избежать проблем с конфликтами имен и использовать «чистую» инкапсуляцию, не нарушая синтаксические правила.
Нужна ли нам эта фича?
- 👍 – О, да, детка!!!
- 👌 – Сомнительно, но Окей
- 👎 – Отстой! (кайфую от текущей реализации)


class House({ int? _windows, int? _bedrooms, int? _swimmingPools, });