flutter 将变量用作参数的常量值无效

x759pob2  于 2022-11-26  发布在  Flutter
关注(0)|答案(9)|浏览(356)
var textSize = 10.0;
// or
double textSize = 10.0;

TextFlutter小部件

child: const Text('Calculate Client Fees',
                   style: TextStyle(fontSize: textSize),)

这里是给出错误
常量值无效
我们是否必须强制使用const值?为什么不能使用vardouble

pod7payv

pod7payv1#

您正在将Text小部件声明为const,这要求它的所有子部件也都是const。如果您想解决这个问题,在这种情况下不应该使用constText小部件,因为您想传递一个非常量变量。
这样做的原因是Flutter使用const关键字作为小部件的标识符,从不重建,因为它将在编译时被评估,* 只评估一次 *。因此,它的每个部分也必须是恒定的。

double textSize = 10.04;
// ...
child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize))

了解更多信息in this article

vcirk6k6

vcirk6k62#

如果你不使用固定值,就不要使用const关键字。例如,在Text的情况下,如果它的字符串是常量,如Text("something here"),那么我们应该使用const,但如果Text的字符串是动态的,那么就不要在Text小部件之前使用const。const Text("something")Text(anyVariabale)所有小部件都是如此。

iibxawm4

iibxawm43#

在dart中,当你在const构造函数中传递某个参数时,编译器会确保设置为默认值的值在代码执行过程中不会改变。
因此,会出现无效的常数值警告。
要解决此问题,您应该从Text前面的中删除const关键字。

watbbzwu

watbbzwu4#

正如@ creativecreatorormayben没有说的,你使用的是const Text(),这就是为什么你必须有一个const值。

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"),
);
gajydyqb

gajydyqb5#

child: const Text('Calculate Client Fees',
                   style: TextStyle(fontSize: textSize),)

应为:

child: Text('Calculate Client Fees',
                   style: TextStyle(fontSize: textSize),)
xe55xuns

xe55xuns6#

应删除关键字const
使用时,它会将小部件放入该高速缓存中。
你不能等待一个值到你的小部件中,然后再把它作为一个常量,当你想这样做的时候,你不应该把你的小部件作为常量。
所以这样做:

double textSize = 10.0;
child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize),)
v9tzhpje

v9tzhpje7#

有时候这可能很棘手,因为Text小部件可能不是const(显示错误的地方),但它的父小部件可能是const或父小部件的父小部件,等等。在这种情况下,它可能会令人惊讶,不能立即发现解决方案。例如:

const PrefLabel(
        title: Text(
          preferenceOptionTitle,
          style: Get.textTheme.headline5!,
          maxLines: 3,
        ),
        subtitle: Text(preferenceOptionDescription),
      ),

在这种情况下,Text不标记为const,因为PrefLabel已经是constconst被移动到字幕

PrefLabel(
        title: Text(
          preferenceOptionTitle,
          style: Get.textTheme.headline5!,
          maxLines: 3,
        ),
        subtitle: const Text(preferenceOptionDescription),
      ),
nqwrtyyt

nqwrtyyt8#

如果要使用vardouble textSize = 10.0;,则文本小部件不能是常量。请删除Text()之前的const

child: Text('Calculate Client Fees', style: TextStyle(fontSize: textSize),)
soat7uwm

soat7uwm9#

最简单的解决方案是删除const关键字。替换为:

child: const Text('Calculate Client Fees',
               style: TextStyle(fontSize: textSize),)

相关问题