离开小部件应包含AnimationController还是将其拉起

时间:2019-01-28 06:14:15

标签: flutter flutter-animation

在向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需要付出一定的代价。我的问题是,在这种情况下,性能成本有多大。

0 个答案:

没有答案