Flutter声明构造参数时提示类型不允许为null报错如何解决?
问题原因
the parameter cannot have a value of null because of its type but the implicit default value is null
这个报错是Flutter 2.0及以上版本默认启用的*空安全(Null Safety)*机制导致的。你参考的视频教程大概率基于未开启空安全的旧版本Flutter编写,相同写法在空安全环境下不符合类型校验规则:
- 你声明的
IconData icon和String teks都是非空类型,默认不允许赋值为null - 你将两个参数放在大括号中声明为可选命名参数,可选命名参数如果没有显式设置默认值,隐式默认值为null,和非空类型的要求冲突,因此触发报错。
三种可行解决方案
方案1:强制要求传参
如果使用该组件时必须传入这两个参数,给参数添加required修饰符即可:
class CardSaya extends StatelessWidget { CardSaya ({required this.icon, required this.teks}); final IconData icon; final String teks; // 剩余类代码 }
方案2:设置参数默认值
如果允许调用时不传这两个参数,给参数设置非空的默认值即可:
class CardSaya extends StatelessWidget { CardSaya ({this.icon = Icons.info, this.teks = '默认文本'}); final IconData icon; final String teks; // 剩余类代码 }
方案3:声明参数为可空类型
如果参数本身允许为空,给类型后缀添加?声明为可空类型即可,后续使用参数时注意做空判断:
class CardSaya extends StatelessWidget { CardSaya ({this.icon, this.teks}); final IconData? icon; final String? teks; // 剩余类代码,使用参数时需判空,例如:teks ?? "无内容" }
内容的提问来源于stack exchange,提问作者Ripper Roo
相关产品推荐
相关产品推荐

