Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 已设置动画的小部件仅设置一次动画_Flutter - Fatal编程技术网

Flutter 已设置动画的小部件仅设置一次动画

Flutter 已设置动画的小部件仅设置一次动画,flutter,Flutter,我有一个小部件,它有一个动画动画文本,在第一个动画之后,它似乎没有用setState重建 Widget build(BuildContext context) { return createPage(texts[currentIndex]); } Widget createPage(Excerpt excerpt) { return new Material(child: new Stack( children: <Widget>[

我有一个小部件,它有一个动画动画文本,在第一个动画之后,它似乎没有用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});
            }
小部件构建(构建上下文){
返回createPage(文本[currentIndex]);
}
Widget createPage(摘录){
返回新材料(子项:新堆栈)(
儿童:[
createBackgroundImage(摘录),
新列(mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
新的Flexible(flex:6,child:new-SizedBox.expand()),
新的柔性(柔性:1,
子项:createHeader(摘录)),
新的柔性(柔性:4,
子项:createTextBox(摘录))
]),
]
));
}
小部件createTextBox(摘录){
返回新的SizedBox.expand(子项:new FlatButton(
颜色:颜色,黑色,
子容器:新容器(
填充:仅限新边缘组(顶部:10.0),
约束:新建BoxConstraints.expand(),
子对象:新的动画文本(摘录.text)),
已按下:(){
setState((){//更新索引});
}
动画测试类:

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());
}
class AnimatedText扩展StatefulWidget{
字符串文本;
动画文本(this.text);
@凌驾
AnimatedTextState createState()=>新的AnimatedTextState(文本);
}
类AnimatedTextState扩展状态
使用SingleTickerProviderStateMixin{
字符串文本;
字符串currentText=“”;
动画控制器;
动画;
AnimatedTextState(this.text){
印刷品(文本);
}
@凌驾
void initState(){
super.initState();
控制器=新的AnimationController(
上限:text.length.toDouble(),
持续时间:新的持续时间(秒数:3),
vsync:这个);
controller.addListener(){
设置状态(){
currentText=text.substring(0,controller.value.round());
});
});
controller.forward();
}
@凌驾
无效处置(){
controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文)=>
新文本(当前文本,样式:speakerStyle());
}
header小部件每次都会重建,但带有动画文本的部分不会。
任何关于如何解决此问题的想法都会很有帮助

小部件上的字段应为最终字段。 状态构造函数不应接受参数。
您应该实现didUpdateConfig,从新的小部件获取数据,以更新您的状态文本字段。

我通过将动画控制器移动到父小部件并在索引从一页到另一页发生变化时控制动画来实现该功能。1.将小部件与TickerProviderStateMixin混合,2.创建动画控件当页面更改时,设置下一个控制器启动。