如何在颤振中延迟动画。
下面提供了容器的不透明度的动画。在本例中,我使用了bool _reduced来根据bool变量更改动画的速度。但是我不想改变速度,我只想把动画延迟500毫秒。无论如何,我都看不出动画片的延迟。
AnimatedOpacity(
duration: _reduced ? Duration(milliseconds: 120) : Duration(milliseconds: 800),
opacity: _reduced ? 0 : 1,
child: Text('hi di hi),
}显然,这比我上面所展示的要做的更多,但本质上我想做这样的事情:
AnimatedOpacity(
duration: _reduced ? Duration(milliseconds: 120) : Duration(milliseconds: 120, delay: 500),
opacity: _reduced ? 0 : 1,
child: Text('hi di hi),
}发布于 2021-10-23 14:55:56
为有状态小部件定义一个延迟变量:Duration delay =...;
然后,当更改不透明度的条件变为真(例如在某个按钮的onTap属性内)时,创建一个计时器,在delay ms之后调用setState:
onTap:(){
Timer t = Timer(
Duration(milliseconds:delay),(){
setState((){
_opacity = myNewValue;
});
});
}Update:由于您说要坚持使用提供程序包,我假设您将UI状态(在本例中为不透明度)存储在某些ChangeNotifier中,因此在本例中,只需用调用更改通知程序来替换setState:
onTap:(){
Timer t = Timer(
Duration(milliseconds:delay),(){
context.read<MyUIStateChangeNotifier>().setOpacity(newOpacityValue);
}顺便提一句,这个小细节不需要更改通知器来保存它,因为它只与当前屏幕相关,所以更改通知器通常用于跨多个屏幕传递状态,以避免每次在构造函数中传递状态。
https://stackoverflow.com/questions/69688973
复制相似问题