采用以下非空安全 Dart 代码:
class RoundedButton extends StatelessWidget {
RoundedButton({this.title, this.color, @required this.onPressed});
final Color color;
final String title;
final Function onPressed;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: Material(
elevation: 5.0,
color: color,
borderRadius: BorderRadius.circular(30.0),
child: MaterialButton(
onPressed: onPressed,
minWidth: 200.0,
height: 42.0,
child: Text(
title,
style: TextStyle(
color: Colors.white,
),
),
),
),
);
}
}
关于构造函数的参数,Android Studio 表示,“参数 [parameter] 由于其类型的原因,不能具有 'null' 的值,但隐含的默认值是 'null'。”
我理解错误并发现我可以像这样简单地修改代码:
class RoundedButton extends StatelessWidget {
RoundedButton({this.title, this.color, required this.onPressed});
final Color? color;
final String? title;
final Function onPressed;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: Material(
elevation: 5.0,
color: color,
borderRadius: BorderRadius.circular(30.0),
child: MaterialButton(
onPressed: onPressed.call(),
minWidth: 200.0,
height: 42.0,
child: Text(
title!,
style: TextStyle(
color: Colors.white,
),
),
),
),
);
}
}
这样,我满足了语言规则,但使用 bang 运算符进行“强制展开”可能是不受欢迎的。
所以我的解决方案似乎很老套......所以在这种情况下,将这段代码转换为空安全的优雅、适当甚至性感的方法是什么,如果有多种方法,那么优缺点是什么?
谢谢!