我有一个动画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());
}
标题窗口小部件每次都重建,但带有AnimatedText的部分不会重建。 有关如何解决此问题的任何想法都会有所帮助
答案 0 :(得分:1)
Widget上的字段应该是最终的。 State构造函数不应该参与。 您应该实现didUpdateConfig以从新Widget中获取数据以更新State的文本字段。