首页 > 解决方案 > 镖。后期初始化最终变量

问题描述

有没有办法后期初始化最终变量。问题是使用类的入口点初始化了许多值,这不是构造函数。因此,它们现在不能是最终的。但在特定类的范围内,它们不会改变。例如。

  Controller controller;
  double width;

  void setup(final itemWidth) {
    controller =  MyController();
    width = itemWidth;
  }

有可能吗?现在我只看到解决方案作为注释。你可能认为这是为了视觉效果。但实际上它有助于避免在测试期间出现不可预测的流量。

标签: dart

解决方案


现在可以延迟初始化变量。有关更多信息,请参阅Dart 的文档。下面的文字是从Dart 的文档中复制而来的:

后期最终变量

您还可以将 late 与 final 结合起来:

// Using null safety:
class Coffee {
  late final String _temperature;

  void heat() { _temperature = 'hot'; }
  void chill() { _temperature = 'iced'; }

  String serve() => _temperature + ' coffee';
}

与普通的 final 字段不同,您不必在其声明或构造函数初始化列表中初始化该字段。您可以稍后在运行时分配给它。但是您只能分配给它一次,并且在运行时检查该事实。如果你尝试多次分配给它——比如调用 bothheat()chill()here——第二个分配会抛出一个异常。这是对最终初始化并且之后不可变的状态进行建模的好方法。


推荐阅读