是否有泛型的AnimationController?如果没有,为什么?

时间:2019-02-27 15:23:43

标签: flutter flutter-animation

扑扑新手。我正在将Tween 与AnimationController一起使用。我正在尝试将animateTo()方法与Offset类型的目标一起使用。这可能吗?

文档说:

  

animateTo(双目标,{持续时间,曲线曲线:Curves.linear})→TickerFuture

     

将动画从当前值驱动到目标

AnimationController:

_controller = AnimationController(
  duration: const Duration(milliseconds: 500),
  vsync: this,
);

AnimateTo():

_controller.animateTo(Offset(0,0))

上面的行不正确:

The argument type 'Offset' can't be assigned to the parameter type 'double'.dart(argument_type_not_assignable)

是否有通用类型的AnimationController?如果没有,为什么?我知道我可以使用Tween<Offset>(begin:.., end:..).animate(_controller)。但是看起来animateTo()和类似的AnimationController方法仅适用于double类型的目标。这看起来很混乱。

2 个答案:

答案 0 :(得分:1)

您需要的是这个

var _controller = AnimationController(vsync: this, duration: Duration(seconds: 2));

var _animation = Tween(begin: Offset(0,0), end: Offset(5,5));

_controller.animateTo(0.5);

Tween类是一个Animatable,可为您的动画生成插值。 animateTo方法的值介于0到1之间(尽管您可以在AnimationController的构造函数中定义这些范围,默认值为0到1)。例如,如果将animateTo方法设置为0.5,则将向右偏移偏移值之间的一半进行动画处理。

答案 1 :(得分:1)

不。 AnimationController 仅处理 double

AnimationController 使用的 double Tween 使用的 double 具有不同的含义。

AnimationController 仅与动画进度有关,而 Tween 可能需要经过多层转换才能输出一个值。

因此,不仅很难将转换后的值转换回其代表的进度,而且还存在一些局限性:

曲线。如果 AnimationController 应该处理任何补间对象,那么它也将隐式支持曲线。

问题是,我们可以有这样的曲线:

enter image description here

但这引起了一个问题。正如我们在上一个gif中看到的那样,通过曲线变换后,我们可以多次发射相同的值。

在那种情况下,如果一个控制器可以发射X次,animateTo(X)的期望行为是什么?

这没有道理。因此, AnimationController 除了线性浮动值外,什么都不能使用。如果我们想要更复杂的行为,我们必须使用不同的对象。