【问题标题】:In Flutter, why some animation classes need vsync while others don't?在 Flutter 中,为什么有些动画类需要 vsync 而有些则不需要?
【发布时间】:2018-08-08 00:02:00
【问题描述】:

在 Flutter 中,有些动画类需要你在构造函数中传递vsync,而有些则不需要。例如,AnimatedSize 需要垂直同步。 AnimatedContainer 没有。

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

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

3) 所有使用 vsync 的类都可以变成不使用的类吗?取舍是什么?

【问题讨论】:

  • 这很可能是AnimatedSize 的特异性。由于它的行为,它需要创建一个RenderObject 来计算其子代的大小。但是SingleTickerProviderMixin 需要State

标签: flutter flutter-animation


【解决方案1】:

Flutter 不错的动画框架有

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

TickerProvider,通常用SingleTickerProviderStateMixin实现,是Ticker与外部因素的绑定。

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

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

【讨论】:

    【解决方案2】:

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

    只有在我们需要渲染组件或小部件以重绘和反映 UI 时,需要在每个特定偏移时间渲染其类状态的构造函数才需要 vsync 属性。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多