如何在Flutter中为RaisedButton的颜色设置动画?

Dan*_*ira 5 flutter

我有一个RaisedButton。我想动画它的颜色从绿色红色,反之亦然,每次用户点击它。

如何做到这一点?

Vah*_*iri 35

您可以AnimatedContainer用作 raiseButton child 。当颜色改变时,它会被动画化!

RaisedButton(
        onPressed: null,
        padding: EdgeInsets.all(0),
        child: AnimatedContainer(
          color: pageIndex == 1 ? Color(0xFF4B4B4B) : Color(0xFFD8D8D8),
          duration: Duration(milliseconds: 300),
        ),
      )
Run Code Online (Sandbox Code Playgroud)

它只是一个容器,所以它可以像文本一样有孩子..

  • 上面@Andrey Turkovsky 的答案更好。例如,使用此方法的一个缺点是点击时按钮的启动效果会丢失。 (2认同)

And*_*sky 11

class ChangeRaisedButtonColor extends StatefulWidget {
  @override
  ChangeRaisedButtonColorState createState() => ChangeRaisedButtonColorState();
}

class ChangeRaisedButtonColorState extends State<ChangeRaisedButtonColor>
    with SingleTickerProviderStateMixin {
  AnimationController _animationController;
  Animation _colorTween;

  @override
  void initState() {
    _animationController =
        AnimationController(vsync: this, duration: Duration(milliseconds: 300));
    _colorTween = ColorTween(begin: Colors.red, end: Colors.green)
        .animate(_animationController);

    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
    _animationController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _colorTween,
      builder: (context, child) => RaisedButton(
            child: Text("Change my color"),
            color: _colorTween.value,
            onPressed: () {
              if (_animationController.status == AnimationStatus.completed) {
                _animationController.reverse();
              } else {
                _animationController.forward();
              }
            },
          ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答!:) 注意:“super.dispose();”应该是“dispose”方法重写的最后一行。 (2认同)