How to add some delay between AnimationController.repeat() in Flutter

4,489

Thanks to @pskink Now it's working as I expected. All you have to do is repeat the controller yourself instead of trying to add delay to controller.repeat()

if(status == AnimationStatus.completed){
 Future.delayed(Duration(milliseconds: 5000),(){
   _controller.forward(from: 0.0);
 });
}
Share:
4,489
SUDESH KUMARA
Author by

SUDESH KUMARA

Updated on December 24, 2022

Comments

  • SUDESH KUMARA
    SUDESH KUMARA over 1 year

    I need to add some delay between each iteration of animation gets call to repeat. Something like the following image. enter image description here

    I tried to do it by passing value to the period parameter of the repeat method but it was not what I expected.

    _controller = AnimationController(vsync: this, duration: widget.period)
          ..addStatusListener((AnimationStatus status) {
            if (status != AnimationStatus.completed) {
              return;
            }
            _count++;
            if (widget.loop <= 0) {
              //_controller.repeat(period: Duration(microseconds: 5000));
              _controller.repeat();
            } else if (_count < widget.loop) {
              _controller.forward(from: 0.0);
            }
          });
    

    I've also tried to add Tween with the animation. That didn't help either. Can you help me clarify where I went wrong?

    AnimatedBuilder(
          animation: Tween<double>(begin: 0.0, end: 1.0).animate(
            CurvedAnimation(
              parent: _controller,
              curve: Interval(0.5, 1.0)
            ),
          ),
          child: widget.child,
          builder: (BuildContext context, Widget child) => _Shiner(
            child: child,
            direction: widget.direction,
            gradient: widget.gradient,
            percent: _controller.value,
            enabled: widget.enabled,
          ),
        );