Flutter构造函数可选参数报错求助:参数不可为null但默认值为null
解决Flutter ReusableCard可选参数cardChild的空安全报错
问题原因
你定义的cardChild是非空的Widget类型,但构造函数里它是可选参数,未传入时默认值为null,这违反了Dart的空安全规则,导致报错。
三种可行解决方案
方案1:将cardChild声明为可空类型
把cardChild的类型改为Widget?(可空Widget),这样它可以接受null值:
class ReusableCard extends StatelessWidget { ReusableCard({required this.colour, this.cardChild}); final Color colour; final Widget? cardChild; // 改为可空类型 @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(15.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: colour, ), child: cardChild, // 可空类型直接使用即可 ); } }
方案2:给cardChild设置默认值
如果希望cardChild始终是非空的,可以给它指定一个默认Widget(比如空容器),这样即使不传参数也不会为null:
class ReusableCard extends StatelessWidget { // 给cardChild设置默认值 ReusableCard({required this.colour, this.cardChild = const SizedBox()}); final Color colour; final Widget cardChild; // 保持非空类型 @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(15.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: colour, ), child: cardChild, ); } }
方案3:将cardChild设为必填参数(按需选择)
如果业务上要求每个ReusableCard都必须有子组件,直接把cardChild设为required:
class ReusableCard extends StatelessWidget { ReusableCard({required this.colour, required this.cardChild}); final Color colour; final Widget cardChild; @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(15.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: colour, ), child: cardChild, ); } }
内容的提问来源于stack exchange,提问作者Sanjeev Chauhan
相关产品推荐
相关产品推荐

