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

如何使用flutter_animate在Widget重建时重启动画?

解决Flutter Animate组件重建时动画不重启的问题

以下是几种可行的解决方案,针对你遇到的场景逐一适配:

方法1:通过唯一Key强制组件重建

每次调用setState时,给animate()组件分配一个变化的Key,强制Animate组件重新初始化,从而触发动画重启。示例代码:

// 定义一个随setState更新的变量,比如计数器
int _updateCount = 0;

// 构建Widget时使用ValueKey
Text('Good\nJob!')
  .animate(key: ValueKey<int>(_updateCount))
  .fadeOut(duration: 2000.ms).scaleXY(duration: 2000.ms, end: 2.0)

// 调用setState时更新计数器
setState(() {
  _updateCount++;
});

方法2:使用AnimateController手动控制

通过创建独立的动画控制器,在Widget生命周期中手动触发重启操作:

late AnimateController _animateController;

@override
void initState() {
  super.initState();
  _animateController = AnimateController();
}

@override
void didUpdateWidget(covariant oldWidget) {
  super.didUpdateWidget(oldWidget);
  // 组件更新时重启动画
  _animateController.restart();
}

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

// 构建代码
Text('Good\nJob!')
  .animate(controller: _animateController)
  .fadeOut(duration: 2000.ms).scaleXY(duration: 2000.ms, end: 2.0)

方法3:利用onRebuild参数直接回调

flutter_animate的animate()方法内置了onRebuild参数,可直接指定组件重建时的动画行为:

Text('Good\nJob!')
  .animate(
    autoPlay: true,
    onRebuild: (controller) => controller.restart()
  )
  .fadeOut(duration: 2000.ms).scaleXY(duration: 2000.ms, end: 2.0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:05:35