在AnimationController
中制作final
StatefulWidget
的最佳方法是什么,以下代码会出错。
final AnimationController _controller; // I want to keep it final
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this); // error
}
答案 0 :(得分:1)
那是不可能的。 initState
无法用于初始化final
变量。
即使那样,也无法将AnimationController
分配给最终属性,因为它取决于this
。
答案 1 :(得分:1)
作为explained by Rémi Rousselet's answer,您不能。
如果您绝对需要_controller
成为final
(为什么?),则可以通过将其包装在另一个对象(例如自定义类, List
,...)并将其变异。例如:
class Boxed<T> {
T value;
}
final _controller = Boxed<AnimationController>();
@override
void initState() {
super.initState();
_controller.value = AnimationController(vsync: this);
}
答案 2 :(得分:0)
您现在可以使用 late
关键字做到这一点。
late final AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}