Dart 2.12 添加了late关键字,它的作用是显式声明一个非空的变量,但不初始化。
例如下面的代码_temperx如果不加late关键字是通不过静态检查的,但是添加了late通过了检查又可能带来潜在的风险。

// Using null safety:
class Milk {
  late String _temperx;

  void changehot() {
    _temperx = 'hot';
  }

  String serve() => _temperx + ' milk';
}

main() {
  var milk = Milk();
  milk.changehot();
  milk.serve();
}

还有就是延迟初始化变量,例如下面的代码,temperx被使用,_readbook这个函数才会被调用,才会temperx初始化。

late String temperx = _readbook(); // Lazily initialized.