我已使用ColorTween在1秒内更改了容器的boxshadow属性,并使用以下代码
class SpecialUnoCard extends StatefulWidget {
final String _value;
SpecialUnoCard(this._value);
@override
_SpecialUnoCardState createState() => _SpecialUnoCardState();
}
class _SpecialUnoCardState extends State<SpecialUnoCard>
with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation _animation;
int index = 0;
final _listOfTweens = [
ColorTween(begin: red, end: blue),
ColorTween(begin: red, end: green),
ColorTween(begin: red, end: orange),
ColorTween(begin: blue, end: red),
ColorTween(begin: blue, end: green),
ColorTween(begin: blue, end: orange),
ColorTween(begin: green, end: red),
ColorTween(begin: green, end: blue),
ColorTween(begin: green, end: orange),
ColorTween(begin: orange, end: red),
ColorTween(begin: orange, end: green),
ColorTween(begin: orange, end: blue),
];
ColorTween tween() =>
_listOfTweens[Random().nextInt(_listOfTweens.length - 1)];
@override
void initState() {
_controller =
AnimationController(vsync: this, duration: Duration(seconds: 1));
_animation = tween()
.chain(CurveTween(curve: Curves.easeInOutCubic))
.animate(_controller);
_controller.addListener(() {
setState(() {});
});
_controller.addStatusListener((status) {
if (status == AnimationStatus.completed) {
_controller.reverse();
} else if (status == AnimationStatus.dismissed) {
_controller.forward();
}
});
_controller.forward();
super.initState();
}
@override
void deactivate() {
_controller.dispose();
super.deactivate();
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(
vertical: _cardMarginVer, horizontal: _cardMarginHor),
padding: EdgeInsets.all(15),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(_cardCornerRadii),
border: Border.all(
color: _animation.value, width: 4, style: BorderStyle.solid),
boxShadow: [
BoxShadow(color: _animation.value, spreadRadius: 12, blurRadius: 25)
],
color: Colors.black,
),
child: Container(
height: _cardHeight,
width: _cardWidth,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.black,
),
child: (widget._value == plus4)
? SvgPicture.asset('assets/plus4.svg')
: SvgPicture.asset('assets/wild.svg'),
),
);
}
}
现在,有没有办法使一堆值之间的颜色动画或随机播放?我想要一些与以下伪代码相关的功能
ColorTween(values: <Color>[Colors.orange , Colors.red , Colors.blue , ........]
您可以说我想将颜色链接在一起
我尝试查找以下帖子,但没有找到我需要的内容。 How could I change ColorTween colors in Flutter
感谢您的时间!
答案 0 :(得分:2)
尝试使用RainbowColor,它可以在几种颜色之间进行插值/补间。完全按照您的描述提供了ColorTween的多色变体:
RainbowColorTween([Colors.orange, Colors.red, Colors.blue])
它也可以在补间上下文之外使用,以在整个光谱中内插颜色,例如
var rb = Rainbow(spectrum: [Colors.orange, Colors.red, Colors.blue]);
Color warmColor = rb[0.25];
Color coldColor = rb[0.83];
顺便说一句,好时机。我是昨天才发布的RainbowColor,老实说我几天前就问过这个问题,我不知道。
答案 1 :(得分:1)
在https://flutter.dev/docs/cookbook/animation/animated-container处查看AnimatedContainer。这是处理动画的一种简便方法,我认为它正是您所需要的。页面上的测试代码将使您立即对其进行测试。只需布置您的装饰并整合一些随机值即可看到魔术。祝你好运!