在 Flutter 中,TickerProviderStateMixin 是一个 混入(Mixin),通常用在 State 类上,用来为 动画(Animation) 提供 Ticker


🧩 1. 什么是 Ticker?

Ticker = 一个不断触发回调的“节拍器”

  • Flutter 每一帧都会刷新(约 60 FPS 或 120 FPS)
  • 每一帧,Ticker 都会调用一次回调,并传入 Duration(动画运行的时间)
  • 动画系统(AnimationController)需要依靠 Ticker 才能运作

所以 AnimationController 必须依赖 TickerProvider 才能创建。


🧩 2. 什么是 TickerProvider?

就是一个可以 产生 Ticker 的对象。

  • TickerProvider 有两个常见实现:

    1. SingleTickerProviderStateMixin
    2. TickerProviderStateMixin

🧩 3. TickerProviderStateMixin 是什么?

👉 它是一个 Mixin,提供 “多个 Ticker” 的能力。

你把它混入到 State 后,这个 State 就能被当成 TickerProvider 来使用。


🧩 4. 什么情况下要用?

你需要多个 AnimationController 时

比如有两个、三个、多个动画:

class MyWidgetState extends State<MyWidget> 
    with TickerProviderStateMixin {
  late AnimationController controller1;
  late AnimationController controller2;

  
  void initState() {
    controller1 = AnimationController(
      vsync: this,
      duration: Duration(seconds: 1),
    );
    controller2 = AnimationController(
      vsync: this,
      duration: Duration(seconds: 2),
    );
    super.initState();
  }

  
  void dispose() {
    controller1.dispose();
    controller2.dispose();
    super.dispose();
  }
}

🧩 5. 和 SingleTickerProviderStateMixin 的区别?

Mixin 能提供几个 Ticker? 典型场景
SingleTickerProviderStateMixin 一个 只需要一个 AnimationController
TickerProviderStateMixin 多个 多个 AnimationController

如果你只用一个动画,优先用 SingleTickerProviderStateMixin(性能略好)。


🧩 6. 为什么 AnimationController 要传 vsync?

vsync: this 的作用:

  • 防止动画在 “屏幕不可见时仍然消耗资源”
  • 节省性能
  • Flutter 会自动暂停不可见动画的 Ticker

不设置 vsync 会造成性能浪费。


🧩 7. 简单总结(最常用的理解)

TickerProviderStateMixin 让你的 State 拥有产生多个 Ticker(多动画)的能力,是多动画情况下的必备。


Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐