Flutter Ticker 动画驱动器

爱被打了一巴掌 2023-10-08 23:14 125阅读 0赞

题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧。


Flutter文章目录


Flutter中的Ticker是一个动画驱动器,它会在每个屏幕刷新周期中调用回调函数,以便动画可以更新自己的状态并重绘。

Flutter Ticker 通常应用在需要在每一帧都执行一些操作的情况下,比如动画或者游戏开发中。

Ticker提供了一个每一帧都会回调的机制,可以用来更新UI或者执行其他操作。以下是一个使用Ticker的示例代码:

  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/scheduler.dart';
  3. class MyWidget extends StatefulWidget {
  4. @override
  5. _MyWidgetState createState() => _MyWidgetState();
  6. }
  7. class _MyWidgetState extends State<MyWidget> with TickerProviderStateMixin {
  8. late final AnimationController _controller = AnimationController(
  9. duration: const Duration(seconds: 1),
  10. vsync: this,
  11. )..repeat();
  12. @override
  13. void dispose() {
  14. _controller.dispose();
  15. super.dispose();
  16. }
  17. @override
  18. Widget build(BuildContext context) {
  19. return Center(
  20. child: RotationTransition(
  21. turns: Tween(begin: 0.0, end: 1.0).animate(_controller),
  22. child: const FlutterLogo(size: 200.0),
  23. ),
  24. );
  25. }
  26. }

上面的代码中,我们创建了一个MyWidget类,它继承自StatefulWidget。
在MyWidget的状态类_MyWidgetState中,我们混入了TickerProviderStateMixin,这个mixin提供了一个TickerProvider对象,用于创建AnimationController。

在_MyWidgetState的构造函数中,我们创建了一个AnimationController,它的duration为1秒,vsync为this,也就是_TickerProviderStateMixin的实例。然后我们调用了AnimationController的repeat方法,让动画重复播放。

在MyWidget的build方法中,我们创建了一个RotationTransition,它的turns属性是一个Tween,它的begin值为0,end值为1,表示从0度旋转到360度。

这个Tween的animate方法返回了一个Animation对象,它的值由AnimationController控制。最后我们把FlutterLogo放在RotationTransition中,就可以看到一个旋转的Flutter Logo了。

Ticker

Ticker使用了Flutter引擎的scheduler来调度回调函数的执行,scheduler会在每个屏幕刷新周期中调用回调函数。

  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/scheduler.dart';
  3. // Create a TickerProviderStateMixin
  4. class MyWidget extends StatefulWidget {
  5. @override
  6. _MyWidgetState createState() => _MyWidgetState();
  7. }
  8. class _MyWidgetState extends State<MyWidget> with TickerProviderStateMixin {
  9. // Declare a Ticker object
  10. late Ticker _ticker;
  11. @override
  12. void initState() {
  13. super.initState();
  14. // Initialize the Ticker object
  15. _ticker = this.createTicker((Duration duration) {
  16. // Do something every tick
  17. });
  18. }
  19. @override
  20. void dispose() {
  21. // Dispose the Ticker object
  22. _ticker.dispose();
  23. super.dispose();
  24. }
  25. @override
  26. Widget build(BuildContext context) {
  27. return Container();
  28. }
  29. }

SingleTickerProviderStateMixin 是一个 mixin 类,它允许我们使用单个 TickerProvider 来管理多个 AnimationController。

  1. import 'package:flutter/material.dart';
  2. class MyWidget extends StatefulWidget {
  3. @override
  4. _MyWidgetState createState() => _MyWidgetState();
  5. }
  6. class _MyWidgetState extends State<MyWidget> with SingleTickerProviderStateMixin {
  7. AnimationController _controller;
  8. @override
  9. void initState() {
  10. super.initState();
  11. _controller = AnimationController(
  12. duration: const Duration(seconds: 1),
  13. vsync: this,
  14. )..repeat();
  15. }
  16. @override
  17. void dispose() {
  18. _controller.dispose();
  19. super.dispose();
  20. }
  21. @override
  22. Widget build(BuildContext context) {
  23. return Container(
  24. child: Center(
  25. child: RotationTransition(
  26. turns: Tween(begin: 0.0, end: 1.0).animate(_controller),
  27. child: Icon(Icons.cached),
  28. ),
  29. ),
  30. );
  31. }
  32. }

在上面的示例中,我们使用了 SingleTickerProviderStateMixin 来管理 _controller,这样我们就可以在 initState 中将它与 TickerProvider 关联起来。

发表评论

表情:
评论列表 (有 0 条评论,125人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Flutter Animation动画

    一,概述    `  Flutter`动画库的核心类是`Animation`对象,它生成指导动画的值,`Animation`对象指导动画的当前状态(例如,是开始、停止还是

    相关 Flutter中的动画

    今天来学习一下Flutter中的动画。我们在js+css中,已经习惯用css3中的animation,transform,transition这三个加在一起去做。 我们像前端