-2

美好的一天,我正在尝试将命名参数 {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 {
                                                     ^^^^^

感谢您的帮助。

4

2 回答 2

2

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

一种选择是给它一个默认值,不是null

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

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

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

另一种选择是实际保持电话可选:

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

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

于 2021-04-08T09:13:32.730 回答
0

错误很明显,您必须将值传递给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 来避免空安全,你的代码应该可以正常工作。

于 2021-04-08T09:07:44.907 回答