扑扑新手。我正在将Tween
文档说:
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类型的目标。这看起来很混乱。
答案 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 应该处理任何补间对象,那么它也将隐式支持曲线。
问题是,我们可以有这样的曲线:
但这引起了一个问题。正如我们在上一个gif中看到的那样,通过曲线变换后,我们可以多次发射相同的值。
在那种情况下,如果一个控制器可以发射X次,animateTo(X)
的期望行为是什么?
这没有道理。因此, AnimationController 除了线性浮动值外,什么都不能使用。如果我们想要更复杂的行为,我们必须使用不同的对象。