dart - 初始化器必须是编译时常量

标签 dart

我只想有一个带有颜色的最终列表:

final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];
final num MAX = 90;
class Square {
 // ...

对于 MAX 没问题,但对于 list 则无法编译: 初始化器必须是编译时常量

我也尝试过:

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

新错误:“初始化程序必须是编译时常量”

我发现唯一的解决方案是在构造函数中初始化...... 我不喜欢这个解决方案:我不想要 Square 对象的列表实例。 我该怎么办?

最佳答案

我没有遇到和你一样的错误。在第一种情况下,我收到编译时警告“预期常量表达式”,在第二种情况下,我收到另一个编译时警告和运行时错误。尝试最新的 SDK,您可以找到 here .

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

在这种情况下,static 没有任何意义,因为 static 表示类变量,对于同一类的所有实例化对象来说都是相同的。在这种情况下,MAX 超出了类边界。因此会显示运行时错误和编译时警告(“顶级字段不能是静态的”)。

我猜对于 Square 类的所有实例来说,MAXCOLORS 应该是相同的。所以这样做是有意义的:

class Square {
    static final List<String> COLORS = const ['#cefbe4', '#81ec72', '#5cd646'];
    static final num MAX = 90;
}

关于dart - 初始化器必须是编译时常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352205/

相关文章:

dart - 如何在 Angular dart 组件中使用 *deferredContent 指令?

android - 验证程序未将数据保存到Firebase数据库

api - 在 flutter 中如果文本内容增加,我想在帖子底部显示更多文本?

firebase - 如何确保用户使用Firebase和Flutter登录

flutter - Flutter:AnimationController-无需按钮即可控制吗?

android-studio - flutter SDK 在 android studio 中不可用

flutter - StreamBuilder 未按预期从 Stream 读取数据

dart - 如何在 Flutter 中将 pdf 转换为文本?

android - 如何在 flutter 中按 List<String> 对 List<Type> 进行排序

dictionary - 在 Dart 中使用 ifAbsent 映射更新方法