如何在 Flutter 中的 AnimationController.repeat() 之间添加一些延迟
How to add some delay between AnimationController.repeat() in Flutter
我需要在每次调用重复动画迭代之间添加一些延迟。像下图这样的东西。
我试图通过将值传递给 repeat 方法的周期参数来做到这一点,但这不是我所期望的。
_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);
}
});
我也试过在动画中添加Tween。那也没有帮助。你能帮我澄清一下哪里错了吗?
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,
),
);
多亏了@pskink 现在一切如我所愿。您所要做的就是自己重复控制器,而不是尝试向 controller.repeat()
添加延迟
if(status == AnimationStatus.completed){
Future.delayed(Duration(milliseconds: 5000),(){
_controller.forward(from: 0.0);
});
}
我需要在每次调用重复动画迭代之间添加一些延迟。像下图这样的东西。
我试图通过将值传递给 repeat 方法的周期参数来做到这一点,但这不是我所期望的。
_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);
}
});
我也试过在动画中添加Tween。那也没有帮助。你能帮我澄清一下哪里错了吗?
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,
),
);
多亏了@pskink 现在一切如我所愿。您所要做的就是自己重复控制器,而不是尝试向 controller.repeat()
添加延迟if(status == AnimationStatus.completed){
Future.delayed(Duration(milliseconds: 5000),(){
_controller.forward(from: 0.0);
});
}