Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在“颤振”中的相似值之间设置动画_Flutter_Flutter Layout_Flutter Animation - Fatal编程技术网

Flutter 在“颤振”中的相似值之间设置动画

Flutter 在“颤振”中的相似值之间设置动画,flutter,flutter-layout,flutter-animation,Flutter,Flutter Layout,Flutter Animation,“颤振”非常擅长在两个不同的值之间制作动画,但是,制作一个在其开始位置结束的值的动画的最佳方法是什么 e、 g我有一个容器,我想收缩它,然后在用户输入时将其扩展回原来的宽度 由于似乎没有简单的方法可以做到这一点,我尝试设置动画和动画控制器,并尝试快速连续调用_controller.forward()和_controller.backword()(开始状态是容器完全展开,结束状态是容器完全收缩)。请注意,我正试图通过“边插入”属性执行此操作 我是不是让事情变得更复杂了?有更好的办法吗 void i

“颤振”非常擅长在两个不同的值之间制作动画,但是,制作一个在其开始位置结束的值的动画的最佳方法是什么

e、 g我有一个容器,我想收缩它,然后在用户输入时将其扩展回原来的宽度

由于似乎没有简单的方法可以做到这一点,我尝试设置动画和动画控制器,并尝试快速连续调用_controller.forward()和_controller.backword()(开始状态是容器完全展开,结束状态是容器完全收缩)。请注意,我正试图通过“边插入”属性执行此操作

我是不是让事情变得更复杂了?有更好的办法吗

void initState() {
super.initState();
_controller = AnimationController(
  vsync: this,
  duration: Duration(milliseconds: 1000),
);

_insetAnimation = Tween<EdgeInsetsGeometry>(
  begin: EdgeInsets.symmetric(horizontal: 0),
  end: EdgeInsets.symmetric(horizontal: 500),
).animate(
  CurvedAnimation(
    parent: _controller,
    curve: Curves.bounceIn,
  ),
);
_insetAnimation.addListener(() => setState(() {}));

请注意,我正试图通过扩展和收缩边插入来实现所需的结果。到目前为止,当我只调用forward时,我能够让它收缩,但是当我在它之后添加reverse方法时,什么也没有发生。其间的延迟只是一次不顾一切的尝试:)

经过一番挖掘,我发现我可以使用此语法在..addStatusListener()中获得我想要的效果

\u insetAnimation=Tween(
开始:边集合。对称(水平:0),
端部:边缘组。对称(水平:25),
).制作动画(
曲线化(
父节点:_控制器,
曲线:Curves.easeOut,
反向曲线:Curves.bounceIn
)..addStatusListener((状态){
如果(状态==AnimationStatus.completed){
_controller.reverse();
}
}),
);
_addListener(()=>setState((){}));

我仍然很好奇是否有一种更有效的方法来实现这一点,尽管经过一些挖掘,我发现我可以使用此语法通过..addStatusListener()获得我想要的效果

\u insetAnimation=Tween(
开始:边集合。对称(水平:0),
端部:边缘组。对称(水平:25),
).制作动画(
曲线化(
父节点:_控制器,
曲线:Curves.easeOut,
反向曲线:Curves.bounceIn
)..addStatusListener((状态){
如果(状态==AnimationStatus.completed){
_controller.reverse();
}
}),
);
_addListener(()=>setState((){}));
我仍然很好奇是否有一种更有效的方法来做到这一点

FlatButton(
                onPressed: () {
                  setState(() {
                    isSignUp = !isSignUp;
                  _controller.forward();
                  });
                  Future.delayed(Duration(seconds: 1));
                  setState(() {
                    _controller.reverse();
                  });
_insetAnimation = Tween<EdgeInsetsGeometry>(
  begin: EdgeInsets.symmetric(horizontal: 0),
  end: EdgeInsets.symmetric(horizontal: 25),
).animate(
  CurvedAnimation(
    parent: _controller,
    curve: Curves.easeOut,
    reverseCurve: Curves.bounceIn
  )..addStatusListener((status) {
      if (status == AnimationStatus.completed) {
       _controller.reverse();
      }
    }),
);
_insetAnimation.addListener(() => setState(() {}));