如何在Flutter中实现类似Vue的渐变动画效果?
最近在尝试从Vue转到Flutter开发,想实现一个按钮点击后颜色平滑过渡的效果。之前用Vue时很简单,直接使用CSS就能搞定。
<button @click="changeColor" :style="{ backgroundColor: color }">Change Color</button>
<script>
export default {
data() {
return { color: '#ff0000' };
},
methods: {
changeColor() {
this.color = this.color === '#ff0000' ? '#00ff00' : '#ff0000';
}
}
}
</script>
但在Flutter里试了几个方法,要么太复杂,要么效果不理想。有人能分享个简单的例子或者推荐个库吗?现在有点迷茫了。
不过我懂你意思,你是想在 Flutter 里搞个颜色渐变动画,就像 Vue 里那样点击一下颜色平滑过渡。这事儿其实挺简单的,核心就是用
AnimatedContainer或者AnimatedSwitcher,配合ColorTween。最简单的做法是用
AnimatedContainer,比如下面这个:这段代码里,
AnimatedContainer会在color属性变化时自动做渐变动画,你只需要在setState里切颜色就行,比 Vue 还省事,不用管过渡时间、关键帧那些。如果你要按钮样式更复杂,比如带边框、圆角啥的,也全塞进
AnimatedContainer就行,它支持的属性贼多。真要追求更精细的控制,比如两个颜色之间插值、自定义曲线,那就用
TweenAnimationBuilder+ColorTween,不过对这种简单需求真没必要。别去翻什么第三方库了,Flutter 自带动画系统已经够用了,写多了你就会发现它其实比 Vue 的 CSS 动画还直观点,至少不用记一堆 keyframes。
AnimatedContainer是效率更高也更简单的方式。它专门用来做这种需要平滑过渡的属性变化,比如颜色、大小等。直接上代码:
关键点:
1.
AnimatedContainer自带动画效果,只需要设置duration。2. 点击按钮时调用
setState改变颜色状态,容器会自动完成平滑过渡。这样写比手动控制动画简单多了,性能也挺好,推荐用这种方式。