Flutter——无限旋转Widget

386 阅读1分钟

封装了一个无限旋转Widget,支持传入需要需要旋转的widget,可以实现对传入的widget 无限旋转的效果

import 'package:flutter/material.dart';

class InfiniteRotate extends StatefulWidget {
  Widget rotateWidget;
  InfiniteRotate({super.key, required this.rotateWidget});

  @override
  State<InfiniteRotate> createState() =>
      _InfiniteRotateState(rotateWidget: rotateWidget);
}

class _InfiniteRotateState extends State<InfiniteRotate>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  Widget rotateWidget;
  _InfiniteRotateState({required this.rotateWidget});

  @override
  void initState() {
    _controller =
        AnimationController(duration: const Duration(seconds: 2), vsync: this);
    _controller.forward();
    _controller.addStatusListener((status) {
      if (status == AnimationStatus.completed) {
        //动画从 controller.forward() 正向执行 结束时会回调此方法
        //重置起点
        _controller.reset();
        //开启
        _controller.forward();
      } else if (status == AnimationStatus.dismissed) {
      } else if (status == AnimationStatus.forward) {
      } else if (status == AnimationStatus.reverse) {}
    });
  }

  @override
  Widget build(BuildContext context) {
    return RotationTransition(
        alignment: Alignment.center, turns: _controller, child: rotateWidget);
  }

  @override
  void dispose() {
    _controller.stop();
    _controller.dispose();
    super.dispose();
  }
}