flutter 文本数据更改时抖动动画转换

i5desfxk  于 2023-02-25  发布在  Flutter
关注(0)|答案(3)|浏览(162)

Text元素的数据发生变化时,Flutter中是否有一种方法来动画化过渡?
我有一个new Text(_value)元素,其中_value根据Slider的位置而改变。有什么方法可以使过渡动画化,这样它就不会像改变_value时那样“中断”了吗?
我知道有一些小部件可以使两个不同的小部件之间的转换具有动画效果,但我只是更改同一个Text小部件的data属性。

pcrecxhr

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是字符串。

bbuxkriu

bbuxkriu2#

我需要同样的东西,所以我创建了一个cross_fade小部件。
https://gist.github.com/cirediew/38abb52e27278dae2b8eba77ed4b3bdc
第一次显示需要initialDatadata是你要放入交叉淡入淡出小部件的String/double/int/,builder是你要创建小部件的builder
它的用法如下:

CrossFade<String>(
    initialData: 'Some String',
    data: myString,
    builder: (value) => Text(value),
),

编辑:
空安全版本,重命名为AnimatedFadeOutInhttps://gist.github.com/cirediew/9f68acb7aed1296a232a5f846071d2c3

f8rj6qna

f8rj6qna3#

您可以使用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),
                ),
              ),

相关问题