Ключевое слово required

Объясните, пожалуйста, назначение ключевого слова required. Есть три вида присвоения в конструкторе: позиционный, значение по умолчанию и именованный с required (чтоб его)

Пытался найти информацию, ответ на мой вопрос, не смог, пришлось сюда обращаться. Почему я не могу просто писать именованный Person({this.name, this.age}), зачем мне нужен required? Создаю экземпляр (см. рис), компилятор начинает ругаться. Даже при наличие обоих аргументов.

Молчу уже про один аргумент. Ясно, если конструктор с двумя параметрами, а я в главном коде пропишу только name, компилятор должен ругаться. Это же естественно. Не все аргументы назначены. На кой тут required-то?

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Falchio

Насколько я понял основной вопрос звучит так:

Почему я не могу просто писать именованный Person({this.name, this.age}), зачем мне нужен required?

Потому что использование с этим синтаксисом конструктора Person({this.name, this.age}) означает, что параметры name и age опциональны.
И либо у них должно быть какое-то значение по умолчанию:

class Person{
  String name;
  int age;

  Person({this.name='Vova', this.age=30})
}

Либо поля класса должны быть nullable:

class Person{
  String? name;
  int? age;

  Person({this.name, this.age})
}

А раз этого нет, то как компилятору предотвратить такой вот вызов, с учётом того что поля класса non-nullable:

var person = Person();

Напоминаю, что параметры ({this.name, this.age}) опциональны сейчас.

Поэтому требуется слово required.

Вообще у меня тоже много вопросов к дизайну языка Dart, пишу на нём только из необходимости.

→ Ссылка