如果可以直接在属性中创建变量初始化,请执行此操作。可读性更好(一个地方寻找)。
您要使用的唯一原因initState
是 无法 直接从其声明中初始化变量。
这些情况大部分是:
例如,如果要创建一个,则AnimationController
需要传递它vsync: this
。但是以下内容无法编译:
class MyState extends State with SingleTickerProviderStateMixin {
final myController = AnimationController(
vsync: this, // compile error, cannot use `this` on initialisers
);
}
而且您不得不写:
class MyState extends State with SingleTickerProviderStateMixin {
AnimationController myController;
@override
void initState() {
super.initState();
myController = AnimationController(
vsync: this, // OK
);
}
}
尽管请注意,随着Dart的未来版本将引入late
关键字,此特定示例将很快更改,该关键字随后将允许:
class MyState extends State with SingleTickerProviderStateMixin {
late final myController = AnimationController(
vsync: this, // OK, not a compile error this time
);
}
您可能仍然需要initState
依赖于widget
/的变量context
。