var textSize = 10.0; // or double textSize = 10.0;
到TextFlutter小部件
Text
child: const Text('Calculate Client Fees', style: TextStyle(fontSize: textSize),)
这里是给出错误常量值无效我们是否必须强制使用const值?为什么不能使用var或double?
const
var
double
pod7payv1#
您正在将Text小部件声明为const,这要求它的所有子部件也都是const。如果您想解决这个问题,在这种情况下不应该使用constText小部件,因为您想传递一个非常量变量。这样做的原因是Flutter使用const关键字作为小部件的标识符,从不重建,因为它将在编译时被评估,* 只评估一次 *。因此,它的每个部分也必须是恒定的。
double textSize = 10.04; // ... child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize))
了解更多信息in this article。
vcirk6k62#
如果你不使用固定值,就不要使用const关键字。例如,在Text的情况下,如果它的字符串是常量,如Text("something here"),那么我们应该使用const,但如果Text的字符串是动态的,那么就不要在Text小部件之前使用const。const Text("something")和Text(anyVariabale)所有小部件都是如此。
Text("something here")
const Text("something")
Text(anyVariabale)
iibxawm43#
在dart中,当你在const构造函数中传递某个参数时,编译器会确保设置为默认值的值在代码执行过程中不会改变。因此,会出现无效的常数值警告。要解决此问题,您应该从Text前面的中删除const关键字。
watbbzwu4#
正如@ creativecreatorormayben没有说的,你使用的是const Text(),这就是为什么你必须有一个const值。
const Text()
const double textSize = 10.0;
或
const textSize = 10.0;
就像这个案子。
Padding( padding: const EdgeInsets.all(value), // this value has to be a `const` because our padding: is marked const child: Text("HI there"), ); Padding( padding: EdgeInsets.all(10), // any double value child: Text("HI there"), );
gajydyqb5#
应为:
child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize),)
xe55xuns6#
应删除关键字const使用时,它会将小部件放入该高速缓存中。你不能等待一个值到你的小部件中,然后再把它作为一个常量,当你想这样做的时候,你不应该把你的小部件作为常量。所以这样做:
double textSize = 10.0; child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize),)
v9tzhpje7#
有时候这可能很棘手,因为Text小部件可能不是const(显示错误的地方),但它的父小部件可能是const或父小部件的父小部件,等等。在这种情况下,它可能会令人惊讶,不能立即发现解决方案。例如:
const PrefLabel( title: Text( preferenceOptionTitle, style: Get.textTheme.headline5!, maxLines: 3, ), subtitle: Text(preferenceOptionDescription), ),
在这种情况下,Text不标记为const,因为PrefLabel已经是const。const被移动到字幕
PrefLabel
PrefLabel( title: Text( preferenceOptionTitle, style: Get.textTheme.headline5!, maxLines: 3, ), subtitle: const Text(preferenceOptionDescription), ),
nqwrtyyt8#
如果要使用var或double textSize = 10.0;,则文本小部件不能是常量。请删除Text()之前的const
double textSize = 10.0;
soat7uwm9#
最简单的解决方案是删除const关键字。替换为:
9条答案
按热度按时间pod7payv1#
您正在将
Text
小部件声明为const
,这要求它的所有子部件也都是const
。如果您想解决这个问题,在这种情况下不应该使用const
Text
小部件,因为您想传递一个非常量变量。这样做的原因是Flutter使用
const
关键字作为小部件的标识符,从不重建,因为它将在编译时被评估,* 只评估一次 *。因此,它的每个部分也必须是恒定的。了解更多信息in this article。
vcirk6k62#
如果你不使用固定值,就不要使用const关键字。例如,在
Text
的情况下,如果它的字符串是常量,如Text("something here")
,那么我们应该使用const
,但如果Text
的字符串是动态的,那么就不要在Text
小部件之前使用const。const Text("something")
和Text(anyVariabale)
所有小部件都是如此。iibxawm43#
在dart中,当你在const构造函数中传递某个参数时,编译器会确保设置为默认值的值在代码执行过程中不会改变。
因此,会出现无效的常数值警告。
要解决此问题,您应该从Text前面的中删除const关键字。
watbbzwu4#
正如@ creativecreatorormayben没有说的,你使用的是
const Text()
,这就是为什么你必须有一个const
值。或
就像这个案子。
gajydyqb5#
应为:
xe55xuns6#
应删除关键字const
使用时,它会将小部件放入该高速缓存中。
你不能等待一个值到你的小部件中,然后再把它作为一个常量,当你想这样做的时候,你不应该把你的小部件作为常量。
所以这样做:
v9tzhpje7#
有时候这可能很棘手,因为
Text
小部件可能不是const
(显示错误的地方),但它的父小部件可能是const
或父小部件的父小部件,等等。在这种情况下,它可能会令人惊讶,不能立即发现解决方案。例如:在这种情况下,
Text
不标记为const
,因为PrefLabel
已经是const
。const
被移动到字幕nqwrtyyt8#
如果要使用
var
或double textSize = 10.0;
,则文本小部件不能是常量。请删除Text()之前的const
soat7uwm9#
最简单的解决方案是删除
const
关键字。替换为: