在向ListView添加新项目的过程中添加动画是非常普遍的要求。
例如在this flutter code lab (chat program)中,当刚刚添加新消息时,会有一个SizeTransition动画。
该示例代码从最终的小部件中创建了动画控制器,并通过构造函数传递了控制器的实例。
void _handleSubmitted(String text) {
_textController.clear();
ChatMessage message = new ChatMessage(
text: text,
animationController: new AnimationController(
duration: new Duration(milliseconds: 700),
vsync: this,
),
);
setState(() {
_messages.insert(0, message);
});
message.animationController.forward();
}
因此,需要循环处理:
void dispose() {
for (ChatMessage message in _messages)
message.animationController.dispose();
super.dispose();
}
但是,从封装角度来看,AnimationController应该是ChatMessage的内部关注点。这意味着我们需要使ChatMessage状态全小部件。
我知道通常statefullwidget需要付出一定的代价。我的问题是,在这种情况下,性能成本有多大。