Flutter/Dart Const构造函数中的常量值无效



获取"无效常数值";以下代码中的错误;持续时间=持续时间";分配

删除";const";在";TimeField.fromElapsed";解决了";无效常数值";错误,但有人能帮我理解原因吗。(我刚开始在flutter中使用const关键字,我读了一些关于它的文章,我想现在已经了解了它的基本知识,但下面的行为仍然令人困惑(

class TimeField extends StatelessWidget {
final Duration duration;
const TimeField({Key? key, required this.duration}) : super(key: key);
const TimeField.fromElapsed({Key? key, required int elapsed})
: duration = Duration(hours: elapsed, minutes: 0, seconds: 0),
super(key: key);

第一个问题是,您在小部件的常量构造函数中使用了一个非常量Duration对象,因此需要将其转换为:

const TimeField.fromElapsed({Key? key, required int elapsed})
: duration = const Duration(hours: elapsed, minutes: 0, seconds: 0),
super(key: key);

但是,您将面临另一个问题,因为您正在向Duration类的const构造函数传递一个非常数值(elapsed变量(。因此,您应该删除const关键字。

Dart中的const变量是指可以将其值定义为编译时常数的变量(可以在应用程序运行之前的编译时计算其值的值,也就是运行时(

常量值示例:

'any string'
10 * 20 // (or any other mathematical operation with const inputs)
const Duration(seconds: 1) // Any Object that has a const constructor and you pass it const arguments
etc.

Duration对象实际上有一个constConstructor,如果你想在那里声明一个constDuration,你可以。但在这一点上,编译器可能不会将elapsed变量识别为编译时间常数,因为它无法提前推断出它的值

最新更新