Ответ 1
Это делает аргумент именованным необязательным аргументом.
Когда вы создаете экземпляр Person
вы можете
Person p;
p = new Person(); // default is _newDbConnection
p = new Person(connectionFactory: aConnectionFactoryInstance);
- без
{}
аргумент будет обязательным - с
[]
аргумент будет необязательным позиционным аргументом
// Constructor with positional optional argument
Person([this.connectionFactory = _newDBconnection]);
...
Person p;
p = new Person(); // same as above
p = new Person(aConnectionFactoryInstance); // you don't specify the parameter name
Именованные необязательные параметры очень удобны для логических аргументов (но, конечно, и для других случаев).
p = new Person(isAlive: true, isAdult: false, hasCar: false);
Существует определенный порядок, в котором могут использоваться следующие типы аргументов:
- обязательные (позиционные) аргументы (только позиционные аргументы могут быть обязательными)
- необязательные позиционные аргументы
- (необязательно) именованные аргументы (именованные аргументы всегда необязательны)
Обратите внимание, что позиционные и именованные необязательные аргументы используют разные разделители для значения по умолчанию. Именованный требует :
но позиционный требует =
.Разработчики языка утверждают, что двоеточие лучше подходит для литерального синтаксиса Map (я бы по крайней мере использовал один и тот же разделитель для обоих).
=
поддерживается как разделитель начиная с Dart 2 и предпочтительнее в соответствии с руководством по стилю, а :
все еще поддерживается.
Смотрите также: