在Flutter中,为什么有些动画类需要vsync,而另一些则不需要?

时间:2018-08-08 00:02:01

标签: flutter flutter-animation

在Flutter中,某些动画类需要您在构造函数中传递vsync,而其他动画类则不需要。例如,AnimatedSize需要vsync。 AnimatedContainer没有。

1)为什么有些动画类需要它,而有些则不需要?

2)这与那些具有状态的类(它们自己的内部vsync)有关吗?

3)所有使用vsync的类都可以变成不使用vsync的类?权衡是什么?

2 个答案:

答案 0 :(得分:1)

vsync是代表TickerProvider的属性(即Tick与Clock的滴答类似,这意味着TickerProvider在每个特定的持续时间将呈现类状态并重绘对象。)

vsync属性仅在该构造函数上必需,该构造函数需要在每个特定的偏移时间呈现其类状态,而我们需要呈现组件或小部件以重绘并反映UI。

vsync可以与需要某些过渡或动画以重新渲染以绘制不同对象的类一起使用。

对于Ex:vsync与AnimationController()类将通知我们的应用每隔几分之一秒重新绘制帧以生成动画,以提供更好的用户体验。

答案 1 :(得分:1)

Flutter好的动画框架具有

vsync将TickerProvider作为参数,这就是为什么我们使用SingleTickerProviderStateMixin的原因,并且正如名称所描述的那样,TickerProvider提供了Ticker,这只是意味着它告诉我们的应用有关Frame更新(或Screen Update)的信息,以便我们的AnimationController可以生成一个新值我们可以重新绘制动画小部件。

TickerProvider通常用SingleTickerProviderStateMixin实现,它是Ticker和外部因素之间的绑定。

拥有vsync(TickerProvider)的主要优点是与Controller一起使用,当您的窗口小部件不显示在屏幕上时可以暂停。如果我们没有此功能,那么即使用户看不到屏幕,渲染也将连续执行。

controller = AnimationController(
      duration: Duration(),
      vsync: this,
    );