如何使变量为final并在initState()

时间:2019-06-21 16:24:44

标签: flutter dart

AnimationController中制作final StatefulWidget的最佳方法是什么,以下代码会出错。

final AnimationController _controller; // I want to keep it final

@override
void initState() {
  super.initState();
  _controller = AnimationController(vsync: this); // error
} 

3 个答案:

答案 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);
}