当Text元素的数据发生变化时,Flutter中是否有一种方法来动画化过渡?我有一个new Text(_value)元素,其中_value根据Slider的位置而改变。有什么方法可以使过渡动画化,这样它就不会像改变_value时那样“中断”了吗?我知道有一些小部件可以使两个不同的小部件之间的转换具有动画效果,但我只是更改同一个Text小部件的data属性。
Text
new Text(_value)
_value
data
pcrecxhr1#
使用AnimatedSwitcher小部件 Package 文本小部件,并在transitionBuilder中定义您的孩子。在子对象(Text小部件)中,定义一个键,如下所示:
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是字符串。
bbuxkriu2#
我需要同样的东西,所以我创建了一个cross_fade小部件。https://gist.github.com/cirediew/38abb52e27278dae2b8eba77ed4b3bdc第一次显示需要initialData。data是你要放入交叉淡入淡出小部件的String/double/int/,builder是你要创建小部件的builder。它的用法如下:
cross_fade
initialData
builder
CrossFade<String>( initialData: 'Some String', data: myString, builder: (value) => Text(value), ),
编辑:空安全版本,重命名为AnimatedFadeOutIn:https://gist.github.com/cirediew/9f68acb7aed1296a232a5f846071d2c3
AnimatedFadeOutIn
f8rj6qna3#
您可以使用AnimatedCrossFade,下面是一个示例:
AnimatedCrossFade
AnimatedCrossFade( crossFadeState: isSelected ? CrossFadeState.showSecond : CrossFadeState.showFirst, duration: const Duration(milliseconds: 400), firstChild: Text( title, maxLines: 1, overflow: TextOverflow.clip, style: Theme.of(context) .textTheme .headline5! .copyWith(color: textColor), ), secondChild: Text( selectedTitle, maxLines: 1, overflow: TextOverflow.clip, style: Theme.of(context). textTheme. headline5!. copyWith(color: selectedColor), ), ),
3条答案
按热度按时间pcrecxhr1#
使用AnimatedSwitcher小部件 Package 文本小部件,并在transitionBuilder中定义您的孩子。
在子对象(Text小部件)中,定义一个键,如下所示:
其中userAnswer是字符串。
bbuxkriu2#
我需要同样的东西,所以我创建了一个
cross_fade
小部件。https://gist.github.com/cirediew/38abb52e27278dae2b8eba77ed4b3bdc
第一次显示需要
initialData
。data
是你要放入交叉淡入淡出小部件的String/double/int/,builder
是你要创建小部件的builder
。它的用法如下:
编辑:
空安全版本,重命名为
AnimatedFadeOutIn
:https://gist.github.com/cirediew/9f68acb7aed1296a232a5f846071d2c3f8rj6qna3#
您可以使用
AnimatedCrossFade
,下面是一个示例: