Flutter 颤振中具有曲线特性的动画

Flutter 颤振中具有曲线特性的动画,flutter,animation,curve,Flutter,Animation,Curve,在我的应用程序中,我有一个容器,我想在单击时以慢曲线开始旋转,然后保持旋转,然后下一次单击将以慢曲线停止 如何在“颤振”中制作曲线动画 像这样的事情: 制作动画控制器和动画 在Stop上结束动画,并在Start上重复动画 脚手架( 背景颜色:颜色。蓝灰色, 正文:中( 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 变换。旋转( 角度:_animation.value, 子:容器( 颜色:颜色。绿色, 身高:80, 宽度:80, 填充

在我的应用程序中,我有一个容器,我想在单击时以慢曲线开始旋转,然后保持旋转,然后下一次单击将以慢曲线停止

如何在“颤振”中制作曲线动画

像这样的事情:

  • 制作动画控制器和动画
  • Stop
    上结束动画,并在
    Start
    上重复动画
  • 脚手架(
    背景颜色:颜色。蓝灰色,
    正文:中(
    子:列(
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    变换。旋转(
    角度:_animation.value,
    子:容器(
    颜色:颜色。绿色,
    身高:80,
    宽度:80,
    填充:所有(30),
    ),
    ),
    填充物(
    填充:仅限常量边集(顶部:20.0),
    孩子:升起按钮(
    颜色:颜色,白色,
    子:文本(_动画?“停止”:“开始”),
    已按下:(){
    如果(_设置动画){
    _AnimatController.animateTo(1,
    持续时间:持续时间(秒数:3),曲线:曲线。轻松);
    }否则{
    _animController.repeat();
    }
    设置状态(()=>\u动画=!\u动画);
    },
    ),
    ),
    ],
    ),
    ),
    )
    
    结果:

  • 制作动画控制器和动画
  • Stop
    上结束动画,并在
    Start
    上重复动画
  • 脚手架(
    背景颜色:颜色。蓝灰色,
    正文:中(
    子:列(
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    变换。旋转(
    角度:_animation.value,
    子:容器(
    颜色:颜色。绿色,
    身高:80,
    宽度:80,
    填充:所有(30),
    ),
    ),
    填充物(
    填充:仅限常量边集(顶部:20.0),
    孩子:升起按钮(
    颜色:颜色,白色,
    子:文本(_动画?“停止”:“开始”),
    已按下:(){
    如果(_设置动画){
    _AnimatController.animateTo(1,
    持续时间:持续时间(秒数:3),曲线:曲线。轻松);
    }否则{
    _animController.repeat();
    }
    设置状态(()=>\u动画=!\u动画);
    },
    ),
    ),
    ],
    ),
    ),
    )
    
    结果:


    请放置gif图像以演示所需的行为。将您尝试过的内容进行编码。刚刚编辑了我的问题,并带有指向gif的链接,具有我想要的动画类型。请放置gif图像以演示所需的行为。将您尝试过的内容进行编码。刚刚编辑了我的问题,带有我想要的那种动画的gif链接
      AnimationController _animController;
      Animation<double> _animation;
    
      @override
      void initState() {
        super.initState();
        _animController = AnimationController(
          duration: Duration(seconds: 2),
          vsync: this,
        );
        _animation =
            Tween<double>(begin: 0, end: 2 * math.pi).animate(_animController)
              ..addListener(() {
                setState(() {});
              });
      }
    
      @override
      void dispose() {
        _animController.dispose();
        super.dispose();
      }
    
    
    
    var _animating = false;
    
    Scaffold(
      backgroundColor: Colors.blueGrey,
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Transform.rotate(
              angle: _animation.value,
              child: Container(
                color: Colors.green,
                height: 80,
                width: 80,
                padding: EdgeInsets.all(30),
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 20.0),
              child: RaisedButton(
                color: Colors.white,
                child: Text(_animating ? "Stop" : "Start"),
                onPressed: () {
                  if (_animating) {
                    _animController.animateTo(1,
                                              duration: Duration(seconds: 3), curve: Curves.ease);
                  } else {
                    _animController.repeat();
                  }
                  setState(() => _animating = !_animating);
                },
              ),
            ),
          ],
        ),
      ),
    )