Dart 中的命名参数

named parameter in Dart

你好,我正在尝试将命名参数 {num phone} 应用于以下示例:

main(){

showInfo("abc@mail.com", "Fatima");
}

String showInfo(String email, String name, {num phone}) {
print(email);
print(name);
print(phone);
return "$email : $name : $phone";
} 

但我收到错误消息:

Error: The parameter 'phone' can't have a value of 'null' because of its type 'num', but the implicit 
default value is 'null'.
Try adding either an explicit non-'null' default value or the 'required' modifier.
Future<String> showInfo(String email, String name, {num phone}) async {
                                                     ^^^^^

感谢您的帮助。

错误很明显,您必须将值传递给phone 参数或添加默认值。这是由于在 Dart 2.12 中引入了 Null Safety

您可以像这样传递一个值:

showInfo("abc@mail.com", "Fatima", phone: 0);

或者给phone参数添加一个默认值:

String showInfo(String email, String name, {num phone = 0}) {
   print(email);
   print(name);
   print(phone);
   return "$email : $name : $phone";
} 

如果你愿意,你可以使用 Dart <2.12 来避免空安全,你的代码应该可以正常工作。

您将参数标记为 num,这意味着它不能是 null。但是,未使用的命名参数的默认值为 null,因此您不能拥有默认值为 null 且数据类型不接受 null 的可选命名参数.

一个选项是给它一个默认值 other 而不是 null:

String showInfo(String email, String name, {num phone = 0})

另一种选择是使它成为一个命名的、但必需的参数,因此它永远不会获得默认值:

String showInfo(String email, String name, {required num phone})

另一种选择是实际保留 phone 可选:

String showInfo(String email, String name, {num? phone})

一些额外的智慧:phone 数字可以以重要的前导零开头,不应在保存时删除。您不能使用 num 作为 phone 号码,您必须使用 string.