首页 > 解决方案 > 如何将静态变量转换为常量并使用它传递给期望最终的类构造函数

问题描述

以下代码出错

Cannot invoke a non-'const' constructor where a const expression is expected.  
Try using a constructor or factory that is 'const'.     
static const MyClass darkerText = MyClass(param);

了解static在这种情况下使用可能不合适。只是想看看是否有任何可能的方法。

class MyClass {
  final int total;
  MyClass(total);
}

class Test {
  static int param = 10;
  static const MyClass darkerText = MyClass(param);
}

main() {
  new Test();
}

标签: flutterdart

解决方案


您似乎误解了constand的意义finalconst是针对在编译时已知的值,因此在您的情况下,如果您的所有值都是编译时常量,尽管有点毫无意义,但这是可能的:

class MyClass {
    final int total;
    const MyClass(this.total);
}

class Test {
    static const int param = 10;
    static const MyClass darkerText = MyClass(param);
}

main() {
    new Test();
}

更正常的是使用final变量,它可以在程序的生命周期中设置,但设置后不要更改,在这种情况下你会使用这样的东西:

class MyClass {
    final int total;
    MyClass(this.total);
}

class Test {
    static int param = 10;
    static final MyClass darkerText = MyClass(param);
}

main() {
    new Test();
}

推荐阅读