flutter - 动画小部件仅动画一次

标签 flutter

我有一个带有动画 AnimatedText 的小部件,在第一个动画之后,它似乎没有使用 setState 重建。

Widget build(BuildContext context) {
   return createPage(texts[currentIndex]);
}

  Widget createPage(Excerpt excerpt) {
    return new Material(child: new Stack(
        children: <Widget>[
          createBackgroundImage(excerpt),
          new Column(mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                new Flexible(flex: 6, child: new SizedBox.expand()),
                new Flexible(flex: 1,
                    child: createHeader(excerpt)),
                new Flexible(flex: 4,
                    child: createTextBox(excerpt))
              ]),
        ]
    ));
  }
   Widget createTextBox(Excerpt excerpt) {
       return new SizedBox.expand(child: new FlatButton(
            color: Colors.black,
            child: new Container(
                padding: new EdgeInsets.only(top: 10.0),
                constraints: new BoxConstraints.expand(),
                child: new AnimatedText(excerpt.text)),
            onPressed: () {
              setState(() {//update index});
            }

AnimatedTest 类:

class AnimatedText extends StatefulWidget {
  String text;

  AnimatedText(this.text);

  @override
  AnimatedTextState createState() => new AnimatedTextState(text);
}

class AnimatedTextState extends State<AnimatedText>
    with SingleTickerProviderStateMixin {
  String text;
  String currentText = "";
  AnimationController controller;
  Animation animation;
  AnimatedTextState(this.text){
    print(text);
  }

  @override
  void initState() {
    super.initState();
    controller = new AnimationController(
        upperBound: text.length.toDouble(),
        duration: new Duration(seconds: 3),
        vsync: this);
    controller.addListener((){
      setState((){
        currentText = text.substring(0,controller.value.round());
      });
    });
    controller.forward();
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) =>
      new Text(currentText, style: speakerStyle());
}

标题小部件每次都会重建,但带有动画文本的部分不会。 关于如何解决此问题的任何想法都会有所帮助

最佳答案

Widget 上的字段应该是最终的。 State 构造函数不应该接受参数。 您应该实现 didUpdateConfig 以从新的 Widget 中获取数据以更新您的 State 的文本字段。

关于flutter - 动画小部件仅动画一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590052/

相关文章:

forms - Flutter - 使用子 map 属性发送表单帖子

flutter snackbar 动画和滑动

flutter - 替换 blocprovider 中的 Bloc 实例

flutter - 错误 : The argument type 'String Function(String)' can't be assigned to the parameter type 'String? Function(String?)?'

android - Flutter 错误 : Each child must be laid out exactly once. 关于建筑布局

gradle - 使用Lateast gradle获取此警告:API 'variant.getMergeAssets()'已过时,已被 'variant.getMergeAssetsProvider()'取代

dart - 按下时更改 float 按钮图标的方法

android - 默认打开文件应用程序 flutter

flutter - 在 LinearGradient 中的位置获取颜色

Dart 捕获 http 异常