理解TickerProviderStateMixin概念
Ticker = 一个不断触发回调的“节拍器”Flutter 每一帧都会刷新(约 60 FPS 或 120 FPS)每一帧,Ticker 都会调用一次回调,并传入Duration(动画运行的时间)动画系统(AnimationController)需要依靠 Ticker 才能运作所以 AnimationController 必须依赖 TickerProvider 才能创建。就是一个可以产生 Tick
·
在 Flutter 中,TickerProviderStateMixin 是一个 混入(Mixin),通常用在 State 类上,用来为 动画(Animation) 提供 Ticker。
🧩 1. 什么是 Ticker?
Ticker = 一个不断触发回调的“节拍器”
- Flutter 每一帧都会刷新(约 60 FPS 或 120 FPS)
- 每一帧,Ticker 都会调用一次回调,并传入
Duration(动画运行的时间) - 动画系统(AnimationController)需要依靠 Ticker 才能运作
所以 AnimationController 必须依赖 TickerProvider 才能创建。
🧩 2. 什么是 TickerProvider?
就是一个可以 产生 Ticker 的对象。
-
TickerProvider有两个常见实现:SingleTickerProviderStateMixinTickerProviderStateMixin
🧩 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(多动画)的能力,是多动画情况下的必备。
更多推荐

所有评论(0)