Flutter:如何在 x 周期后终止动画循环?

Flutter: How to terminate animation loop after x cycles?

刚开始学习Flutter。尝试创建一个动画圆圈,该圆圈展开和缩回 x 次然后终止。我该如何实现?

目前,我的圆形动画在无限循环中展开然后缩回。任何指导表示赞赏。

    class BreathingCircle extends StatefulWidget {
  const BreathingCircle({Key? key}) : super(key: key);

  @override
  _BreathingCircleState createState() => _BreathingCircleState();
}

class _BreathingCircleState extends State<BreathingCircle>
    with SingleTickerProviderStateMixin {
  late final AnimationController _controller;
  late final Animation<double?> _shapeSizeChanger;

  // **** Currently this animation runs in endless loop. How can I get it to stop after
  // x expansion-retraction cycles?
  @override
  void initState() {
    super.initState();
    _controller =
        AnimationController(duration: const Duration(seconds: 2), vsync: this)
          ..repeat(reverse: true);
    _shapeSizeChanger = Tween<double>(begin: 0, end: 300).animate(_controller)
      ..addListener(() {
        setState(() {});
      });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: const AnimationBreather(), //Stack of shapes
      width: _shapeSizeChanger.value,
      height: _shapeSizeChanger.value,
    );
  }

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

您正在使用重复 AnimationControllerduration 为 2 秒。您以循环开始动画:_controller.repeat(reverse: true)。 要停止它,您可以调用 _controller.stop()_controller.reset()。唯一的问题是,什么时候去做。

有几种不同的方法。最明显的一个是使用 Timer(或 Future.delayed)在几秒后安排回调。例如,您的动画 运行s 持续 2 秒,然后反转 2 秒,总共 4 秒。重复 10 次后停止,等同于说“40 秒后停止”,所以你可以这样写:

Future.delayed(Duration(seconds: 40), () {
  _controller.stop();
});

或者,您可以使用 addStatusListener 来监控动画进度。或许不用 运行 循环播放你的动画,你可以让你的动画只 运行 一次。然后一旦您监视它已完成 运行ning 并停止,您可以再次启动它,这样您就可以跟踪它启动了多少次。