You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter缩放动画问题:如何实现从0到1后在0.8与1间交替?

解决方案

要实现先从0缩放至1,再在0.8与1之间交替变化的动画,你需要把动画拆分为两个阶段执行:

  1. 第一阶段:从0动画到1
  2. 第二阶段:在0.8和1之间循环反向动画

修改后的代码如下:

late final AnimationController _controller;
late final Animation<double> _animation;

@override
void initState() {
  super.initState();
  _controller = AnimationController(
    duration: const Duration(seconds: 2),
    vsync: this,
  );
  _animation = CurvedAnimation(
    parent: _controller,
    curve: Curves.fastOutSlowIn,
  );

  // 先执行从0到1的初始缩放动画
  _controller.forward().then((_) {
    // 初始动画完成后,启动0.8与1之间的循环交替动画
    _controller.repeat(
      min: 0.8,
      max: 1.0,
      reverse: true,
      // 可根据需求调整循环动画的时长
      duration: const Duration(milliseconds: 1000),
    );
  });
}

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

代码说明:

  • 初始时不再直接调用repeat(),而是通过forward()让控制器从默认初始值0动画到1,完成第一阶段的缩放。
  • 当forward()动画执行完成后,通过then回调启动循环动画:设置min:0.8和max:1.0,并开启reverse:true,实现0.8与1之间的交替缩放。
  • 你可以根据视觉需求调整循环阶段的duration,控制交替的速度。

最后在界面中使用ScaleTransition包裹需要缩放的组件即可:

ScaleTransition(
  scale: _animation,
  child: // 替换为你的目标组件
)

内容的提问来源于stack exchange,提问作者deandrehaijiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:55:16