在 Flutter 中,有些动画类需要你传入vsync
构造函数,而有些则不需要。比如AnimatedSize
需要vsync。AnimatedContainer
没有。
1) 为什么有些动画类需要它而有些不需要?
2)这是否与那些具有状态的类(它们自己的内部 vsync)有关?
3) 所有使用 vsync 的类都可以变成不使用的类?什么是权衡?
在 Flutter 中,有些动画类需要你传入vsync
构造函数,而有些则不需要。比如AnimatedSize
需要vsync。AnimatedContainer
没有。
1) 为什么有些动画类需要它而有些不需要?
2)这是否与那些具有状态的类(它们自己的内部 vsync)有关?
3) 所有使用 vsync 的类都可以变成不使用的类?什么是权衡?
vsync 是代表 TickerProvider 的属性(即,Tick 类似于时钟的滴答声,这意味着在每个特定持续时间 TickerProvider 将呈现类状态并重绘对象。)
只有当我们需要渲染组件或小部件以重绘和反映 UI 时,需要在每个特定偏移时间渲染其类状态的构造函数才需要 vsync 属性。
vsync 可以与需要某些过渡或动画重新渲染以绘制不同对象的类一起使用。
例如:带有 AnimationController() 类的 vsync 将通知我们的应用每隔几秒重绘帧以生成动画以提供更好的用户体验。
Flutter 好的动画框架都有
vsync 将 TickerProvider 作为参数,这就是我们使用 SingleTickerProviderStateMixin 的原因,正如其名称所述,TickerProvider 提供了 Ticker,这意味着它告诉我们的应用程序有关帧更新(或屏幕更新),以便我们的 AnimationController 可以生成一个新值,我们可以重绘动画小部件。
TickerProvider,通常用 实现SingleTickerProviderStateMixin
,是 Ticker 和外部因素之间的绑定。
拥有的主要优点vsync(TickerProvider)
是与控制器一起使用,当您的小部件不在屏幕上时可以暂停。如果我们没有这个,那么即使屏幕对用户不可见,渲染也会持续执行。
controller = AnimationController(
duration: Duration(),
vsync: this,
);