textField中 FocusNode获取焦点
DropdownButton
把List<dynamic>转换成 指定的类型
List.from(elements)!
空安全
操作符 ? :放在类型后面表示当前变量可为null,例如 String a 和 String ? b ,a 不能为null,而 b 可以。
操作符 !:表示此变量值不为null,如果为null则会抛出异常。使用请慎重考虑。
延迟初始化
late 修饰符也有一些特殊的能力。虽然听起来起来有一些自相矛盾,但是您可以在一个包含初始化内容的字段上使用 late:
// Using null safety:
class Weather {
late int _temperature = _readThermometer();
}
当您这么声明时,会让初始化延迟执行。实例的构造将会延迟到字段首次被访问时执行,而不是在实例构造时就初始化。换句话说,它让字段的初始化方式变得与顶层变量和静态字段完全一致。当初始化表达式比较消耗性能,并且有可能不需要时,这会变得非常有用。
当您在实例字段上使用 late 时,延迟初始化会给您带来更多的便利。通常实例字段的初始化内容无法访问到 this,因为在所有的初始化方法完成前,您无法访问到新的实例对象。但是,使用了 late 让这个条件不再为真,所以您可以访问到 this、调用方法以及访问实例的字段

```





