Invalid Constant Value using variable as parameter

var textSize = 10.0;
// or
double textSize = 10.0;

into Text Widget of Flutter

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

Here it is giving error

Invalid Constant Value

Do we have to compulsory use const value? Why can not we use var or double?

110970 次浏览

As @ 创意创作者或者也许不是 said you are using const Text() which is why you have to have a const value there. 你可以选择

const double textSize = 10.0;

or

const textSize = 10.0;

Just like this case.

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

您将 Text小部件声明为 const,这要求它的所有子部件也是 const。如果您想修复这个问题,那么在这种情况下不应该使用 const Text小部件,因为您想要传递一个非常数变量。

这是因为 Flutter 使用 const关键字作为小部件的指示符,以便在编译时和 只有一次时对其进行 永远不会重建。因此,它的每一部分也必须是恒定的。

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

Read more about it 在这篇文章中.

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

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

should be:

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

In dart when you pass something as a parameter in a const constructor, the compiler makes sure that the value set as default is not changed during the execution of the code.

因此,会出现无效常量值警告。

要解决这个问题,您应该从 Text 前面删除 const 关键字。

您应该删除关键字 康斯特

当使用它时,它将小部件放入缓存中。

你不能等待一个值进入你的小部件,然后把小部件再次作为一个常量。当你想这样做时,你不应该把你的小部件常量。

那就这么做吧:

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

如果不使用固定值,则不要使用 康斯特关键字。 例如,在 Text的例子中,如果它的字符串像 Text("something here")一样是常量,那么我们应该使用 const,但是如果 Text的字符串是动态的,那么在 Text小部件之前不要使用 const。 const Text("something")Text(anyVariabale) 所有小部件的情况都是一样的。

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

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

在这种情况下,Text没有用 const标记,因为 PrefLabel已经是 const了。通过 linting 的更正: const被移动到副标题

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

最简单的解决方案是删除 const关键字。 取代:

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