使用setState()仍无法重启TweenAnimationBuilder动画求助
解决TweenAnimationBuilder调用setState后无法重启的问题
你的代码问题出在Tween的end值固定为1.0:当第一次动画结束后,_start被设为1,此时新的Tween是begin:1.0, end:1.0,两个值完全相同,动画自然不会执行。
方案1:双向循环动画(从0→1→0→1...)
只需调整Tween的end值,让每次动画的起止值交替产生差值:
class SocOptimiserProgressIndicator extends StatefulWidget { @override State<SocOptimiserProgressIndicator> createState() => _SocOptimiserProgressIndicatorState(); } class _SocOptimiserProgressIndicatorState extends State<SocOptimiserProgressIndicator> { double _start = 0; @override Widget build(BuildContext context) { final size = 40.0; return TweenAnimationBuilder<double>( // 修改end为1 - _start,让起止值交替变化 tween: Tween(begin: _start, end: 1 - _start), duration: Duration(seconds: 4), onEnd: () => setState(() { _start = 1 - _start; }), builder: (context, value, child) { int percentage = (value * 100).ceil(); // 保留你原有的UI构建逻辑 return Center(child: Text('$percentage%')); }); } }
方案2:单向重复动画(每次都从0→1重启)
如果不需要反向动画,直接在onEnd里重置_start为0即可:
onEnd: () => setState(() { _start = 0; }),
这样每次动画结束后,都会重新生成begin:0, end:1的Tween,触发新一轮动画。
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

