首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振AnimatedContainer / AnimatedOpacity延迟动画

颤振AnimatedContainer / AnimatedOpacity延迟动画
EN

Stack Overflow用户
提问于 2021-10-23 14:16:12
回答 1查看 788关注 0票数 0

如何在颤振中延迟动画。

下面提供了容器的不透明度的动画。在本例中,我使用了bool _reduced来根据bool变量更改动画的速度。但是我不想改变速度,我只想把动画延迟500毫秒。无论如何,我都看不出动画片的延迟。

代码语言:javascript
复制
AnimatedOpacity(
   duration: _reduced ? Duration(milliseconds: 120) : Duration(milliseconds: 800),
   opacity: _reduced ? 0 : 1,
   child: Text('hi di hi),
}

显然,这比我上面所展示的要做的更多,但本质上我想做这样的事情:

代码语言:javascript
复制
   AnimatedOpacity(
       duration: _reduced ? Duration(milliseconds: 120) : Duration(milliseconds: 120, delay: 500),
       opacity: _reduced ? 0 : 1,
       child: Text('hi di hi),
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-23 14:55:56

为有状态小部件定义一个延迟变量:Duration delay =...;

然后,当更改不透明度的条件变为真(例如在某个按钮的onTap属性内)时,创建一个计时器,在delay ms之后调用setState

代码语言:javascript
复制
onTap:(){
        Timer t = Timer(
            Duration(milliseconds:delay),(){
          setState((){
            _opacity = myNewValue;
          });
        });
      }

Update:由于您说要坚持使用提供程序包,我假设您将UI状态(在本例中为不透明度)存储在某些ChangeNotifier中,因此在本例中,只需用调用更改通知程序来替换setState

代码语言:javascript
复制
 onTap:(){
            Timer t = Timer(
                Duration(milliseconds:delay),(){
              context.read<MyUIStateChangeNotifier>().setOpacity(newOpacityValue);
          }

顺便提一句,这个小细节不需要更改通知器来保存它,因为它只与当前屏幕相关,所以更改通知器通常用于跨多个屏幕传递状态,以避免每次在构造函数中传递状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69688973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档