问题描述
如果我从命名参数中删除 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 中添加了健全的空安全性,并且 required
现在是一个需要传递给命名参数的关键字,以便在未传递此参数的情况下不会让编译器运行。它使您的代码更加严格和安全。
如果您确实认为此变量可以为 null,那么您可以通过在其后添加 ?
来更改类型,以便不需要必需的关键字,或者您可以为参数添加默认值。>