在颤振中required和@required之间有什么区别.它们之间的区别是什么?我们什么时候需要使用它们



如果我从命名参数中删除required,它会给我一个错误:

参数"color"//的值不能为"null",因为类型,但隐式默认值为"null"。

它们之间的区别以及我们需要在何时使用它们?

class RoundedButton extends StatelessWidget {
late final Color color;
final String title;
final VoidCallback? onPressedInput;
RoundedButton(
{required this.color,
required this.title,
@required this.onPressedInput});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: Material(
color: color,
borderRadius: BorderRadius.circular(30.0),
elevation: 5.0,
child: MaterialButton(
onPressed: onPressedInput,
minWidth: 200.0,
height: 42.0,
child: Text(
title,
),
),
),
);
}
}

@required只是一个注释,它允许分析器让您知道您缺少一个命名参数,仅此而已。因此,您仍然可以编译应用程序,如果未传递此命名参数,则可能会出现异常。

然而,在dart中添加了健全的null安全性,并且required现在是一个需要传递给命名参数的关键字,这样,如果没有传递该参数,它就不会让编译器运行。它使您的代码更加严格和安全。

如果您真的认为这个变量可以为null,那么您可以通过在它后面添加?来更改类型,这样就不需要所需的关键字,或者您可以为参数添加默认值。

https://dart.dev/null-safety/faq#how-是否需要与新的所需关键字进行比较

@required注释标记必须传递的命名参数;如果否则,分析器会报告提示。

对于null安全性,具有不可为null类型的命名参数必须要么有默认值,要么用新的必需关键字标记。否则,它不可为null是没有意义的,因为未传递时,它将默认为null。

当从遗留代码调用null安全代码时,所需的关键字为处理方式与@required annotation完全相同:未能提供参数将导致分析器提示。

当从null安全代码调用null安全代码时,未能提供必需的参数是一个错误。

这对移民意味着什么?如果需要添加,请小心以前不需要@。任何未通过新要求的参数将不再编译。相反,您可以添加默认值或使参数类型可以为null。

最新更新