Flutter const Text构造器传入动态变量报错Null无法赋值String类型
报错根因
你在Expanded组件前添加了const修饰符,Dart语法要求被const标记的组件的所有子组件、入参都必须是编译阶段就能确定的常量值。但你传入Text构造器的questions[questionNumber]是State类的实例属性,值会在运行时动态变化,不满足常量要求,因此触发了常量表达式求值异常、参数类型不匹配等报错。
解决方法
直接删除Expanded前的const关键字即可修复问题,修改后的代码片段如下:
@override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // 移除了此处的const修饰 Expanded( flex: 5, child: Padding( // 固定不变的EdgeInsets可以单独保留const修饰 padding: const EdgeInsets.all(10.0), child: Center( child: Text( questions[questionNumber], textAlign: TextAlign.center, // 固定不变的TextStyle也可以单独保留const修饰 style: const TextStyle( fontSize: 25.0, color: Colors.white, ), ), ), ), ), ], ); }
如果希望尽可能保留const的性能优化收益,可以把不会动态变化的参数(比如内边距、文本样式)单独加const修饰,不需要整段外层组件都加const。
内容的提问来源于stack exchange,提问作者biswajitdas
相关产品推荐
相关产品推荐

