【问题标题】:Flutter: Error in assigning value to const colorFlutter:将值分配给 const color 时出错
【发布时间】:2019-10-23 10:16:33
【问题描述】:
const color = Colors.red; // no error
const color100 = Colors.red[100]; // error

如果Colors.red 是编译时间常数,为什么Colors.red[100] 不是。

【问题讨论】:

  • 我的猜测是,colors.dart(其中定义了 ColorSwatch,MaterialColor 的基类)中的重载 [] 运算符方法未定义为 const,而普通构造函数是。
  • 我的评论部分错误。 Colors.red 实际上是一个静态 const 字段,它之所以有效,是因为 MaterialColor 的构造函数也是 const。

标签: flutter dart


【解决方案1】:

您可以将Colors.red 的值分配给const 变量,因为Colors.redstatic constMaterialColor 实例。 MaterialColor 扩展 ColorSwatch 进而扩展 Color,这就是为什么你可以使用 MaterialColor 作为 Color

Colors.red[100] 不能分配给const 变量,因为它的值是通过应用在ColorSwatch 中定义的[] 运算符获得的:

Color operator [](T index) => _swatch[index];

运算符类似于命名函数——主要区别在于它们使用不同的语法。运算符和函数现在不能使用 const 关键字,即使它们只返回 const 值,因此它们的返回值也不能分配给 const 变量。

【讨论】:

  • named functions是什么意思?所有的函数都是命名函数,是不是它们或者你的意思是named constructor
  • 我的意思是具有字母数字名称的函数,与运算符不同,可以将其视为使用符号而不是字母数字名称的函数。
【解决方案2】:

因为您只能将常量值分配给const 变量。

并且运算符T1 operator [](T2 i) 的返回类型不是/不能声明为const

所以你不能这样做const a = b[c];

就像函数 T1 x(T2 y) 的返回类型不是/不能声明为 const

所以你不能这样做const z = x(y);

因为当您使用运算符或函数时,您不会在调用时创建返回值,因此您不会返回一个常量值。这只能通过构造函数来实现。

如果ClassA 的构造函数声明为const,那么你可以执行const a = ClassA();

【讨论】:

    【解决方案3】:

    编辑地图也出现同样的错误

    看起来像是关于 dart,因为当我尝试运行此代码时,它给了我同样的错误

    const x = const ['value'];
    const y = x[0]; // error
    const z = x; // no error
    

    【讨论】:

    • 谢谢,但这更像是对问题的支持而不是答案。
    • 是的,我写它,因为我认为它不仅仅是颜色:)
    猜你喜欢
    • 2011-01-31
    • 2013-10-15
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多