Flutter 在flatter中,为什么一些动画类需要vsync而其他类不需要';T

Flutter 在flatter中,为什么一些动画类需要vsync而其他类不需要';T,flutter,flutter-animation,Flutter,Flutter Animation,在flatter中,某些动画类需要您在构造函数中传递vsync,而其他动画类则不需要。例如,AnimatedSize需要vsync动画容器没有 1) 为什么有些动画课程需要它而有些不需要 2) 这与那些具有状态的类(它们自己的内部vsync)有关吗 3) 所有使用vsync的类都可以转换成不使用vsync的类?那么折衷是什么呢?vsync是表示TickerProvider的属性(即,Tick类似于时钟的Tick,这意味着在每个特定的持续时间,TickerProvider将呈现类状态并重新绘制对象

在flatter中,某些动画类需要您在构造函数中传递
vsync
,而其他动画类则不需要。例如,
AnimatedSize
需要vsync<代码>动画容器没有

1) 为什么有些动画课程需要它而有些不需要

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


3) 所有使用vsync的类都可以转换成不使用vsync的类?那么折衷是什么呢?

vsync是表示TickerProvider的属性(即,Tick类似于时钟的Tick,这意味着在每个特定的持续时间,TickerProvider将呈现类状态并重新绘制对象)

vsync属性仅在构造函数上是必需的,当我们需要呈现组件或小部件以重新绘制和反映UI时,构造函数需要在每个特定的偏移时间呈现它的类状态

vsync可用于需要某些转换或动画才能重新渲染以绘制不同对象的类


例如:vsync with AnimationController()类将通知我们的应用程序每隔几秒钟重新绘制帧,以生成动画,从而提供更好的用户体验。

flatter良好的动画框架

vsync将TickerProvider作为参数,这就是为什么我们使用SingleTickerProviderStateMixin的原因,正如命名的TickerProvider提供的Ticker所描述的那样,TickerProvider提供Ticker,这仅仅意味着它告诉我们的应用程序有关帧更新(或屏幕更新),以便我们的AnimationController可以生成一个新值,我们可以重新绘制动画小部件

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

拥有
vsync(TickerProvider)
的主要优点是与控制器一起使用,当小部件不在屏幕上时,控制器可以暂停。如果我们没有这个,那么即使用户看不到屏幕,渲染也会持续执行

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

这很可能是
AnimatedSize
的特殊性。由于其行为,它需要创建一个
RenderObject
,以计算其子对象的大小。但是
SingleTickerProviderMixin
需要一个
状态