Flutter 向子组件传递类字段报错:使用Container时出现空类型赋值错误
问题产生原因
- 核心错误是第一段代码中你给
Align组件添加了多余的const修饰符:被
const修饰的Widget要求其所有子属性都必须是编译期常量,而你传入Text的name是NameContainer的实例成员变量,属于运行时动态传入的值,不满足const构造器的参数要求,因此抛出类型不匹配错误。 - 第二段代码可正常运行的原因是你没有给最外层的
Text加const修饰,不需要遵守编译期常量的限制,动态传入的name可以正常赋值。 - 额外语法问题:第一段代码的
Text组件末尾多写了一个英文分号,修复const问题后也需要删除该分号避免语法报错。
修复后可运行代码
class NameContainer extends StatelessWidget { const NameContainer({ required this.name, Key? key}) : super(key : key); final String name; @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(20.0), // 移除Align前的const修饰即可 child: Align( alignment: Alignment.center, child: Text( name, textAlign: TextAlign.center, style: const TextStyle( fontWeight: FontWeight.bold, ) ) ) ); } }
如果需要保留const做性能优化,仅给Alignment、TextStyle这类本身是固定常量的属性加const即可,不要给包含动态参数的父组件加const修饰。
内容的提问来源于stack exchange,提问作者Blaine Bursey
相关产品推荐
相关产品推荐

