如何每隔1秒运行一次这个setState函数

时间:2018-06-08 13:57:37

标签: dart flutter flutter-layout flutter-animation

void play(){    
setState(() {
  tween = new VibesTween(
    tween.evaluate(animation),
    new Wave.random(size, random),
  );
  animation.forward(from: 0.0);
});
}

我需要调用此播放功能来动画特定的动画。唯一的问题是每次单击按钮时它都会运行。我需要它每隔1秒调用一次状态,然后每秒再次重新渲染动画。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

你真的不需要每秒呼叫setState,你只需要一个重复的动画。对于这种情况,AnimationControllerrepeat方法。

要以最基本的形式将其设置为可以调用,

animationController.repeat();

但您也可以提供覆盖,如

animationController.repeat(min: 0.0, max: 1.0, period: Duration(seconds: 1));

答案 1 :(得分:1)

您可以在play()方法中将其作为回调函数参数传递,每隔一秒调用Timer.Periodic(Duration, Callback)方法。

const oneSec = const Duration(seconds: 1);
new Timer.periodic(oneSec, (Timer t) -> play());

答案 2 :(得分:0)

我确信您的animation对象是AnimationController

创建它时,您只需添加状态监听器并每秒重新启动动画,如下所示:

animation = AnimationController(duration: const Duration(seconds: 1),)
  ..addStatusListener((AnimationStatus status) {
    if (status == AnimationStatus.completed) {
       setState(() {
         tween = new VibesTween(
           tween.evaluate(animation),
           new Wave.random(size, random),
         );
         animation.forward(from: 0.0);
       });
    }        
  });

如果您不熟悉..语法,它只会返回它执行void函数的对象,这样您就可以使用方便的初始化你的animation对象。

如果您想继续使用您的功能,您显然也可以拨打play

if (status == AnimationStatus.completed)
  play();