镖。后期初始化最终变量

Gen*_*mes 16 dart

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

  Controller controller;
  double width;

  void setup(final itemWidth) {
    controller =  MyController();
    width = itemWidth;
  }
Run Code Online (Sandbox Code Playgroud)

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

Ell*_*ogo 33

现在可以延迟初始化变量。有关更多信息,请参阅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';
}
Run Code Online (Sandbox Code Playgroud)

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