当Text
元素的数据发生变化时,Flutter中是否有办法为过渡设置动画?
我有一个new Text(_value)
元素,其中_value
根据滑块位置而变化。是否有任何方法可以动画化过渡,所以它不像刚更改_value
时那样“突然”?
我知道有一些小部件可以动画化两个不同小部件之间的过渡,但是我只更改了同一data
小部件的Text
属性。
答案 0 :(得分:3)
我需要同样的东西,所以我创建了一个cross_fade
小部件。
https://gist.github.com/cirediew/38abb52e27278dae2b8eba77ed4b3bdc
第一次显示需要initialData
。
data
是您要在交叉渐变小部件中放入的String / double / int /任何内容。还有builder
,您可以在其中创建窗口小部件。
它的用法如下:
CrossFade<String>(
initialData: 'Some String',
data: myString,
builder: (value) => Text(value),
),
答案 1 :(得分:1)
我遇到了同样的问题,为此我使用了 ValueListenableBuilder 。 因此,当滑块更改时,我会通知我由Opacity小部件包裹的文本:
我有这个:
var textOpacity = ValueNotifier(1.0);
然后:
Widget _getHeaderText() {
return ValueListenableBuilder(
valueListenable: textOpacity,
builder: (context, value, child) {
return Opacity(
opacity: value,
child: Text(
titles[_pageIndex],
),
);
});
}
在滚动侦听器中,我只是通知我的不透明度小部件值:
textOpacity.value = newOpacityValue; //for example .5
答案 2 :(得分:1)
使用 AnimatedSwitcher 小部件包装文本小部件,并在transitionBuilder中定义您的孩子。
在子项(文本小部件)内,定义一个这样的键:
AnimatedSwitcher(
duration: Duration(milliseconds: 200),
transitionBuilder:
(Widget child, Animation<double> animation) {
return SlideTransition(
child: child,
position: Tween<Offset>(
begin: Offset(0.0, -0.5),
end: Offset(0.0, 0.0))
.animate(animation),
);
},
child: Text(
userAnswer,
key: ValueKey<String>(userAnswer),
style: TextStyle(fontSize: 45, color: Colors.white),
),
)
哪个userAnswer是字符串。