使用StreamBuilder制作动画

时间:2019-11-18 16:06:56

标签: flutter dart flutter-animation

项目

嗨, 我用flutter创建了一个简单的应用,该应用可以根据用户的垂直拖动力,使用streambuilder更改容器的高度。

因此,由于用户输入更新非常快,因此这迫使streambuider进行多次重建,从而产生动画效果。

代码

    final StreamController streamController = StreamController<double>();
    double height = 0.0;

    StreamBuilder(
      initialData: 0.0,
      stream: streamController.stream,
      builder: (context, snapshot) {
        return Container(
          height: snapshot.data,
        );
      },
    ),

     ....

     height += (dragUpdateDY);
     streamController.add(height);

问题

尽管代码按预期工作,但我一直认为这不是一个好的解决方案,因为它迫使UI在一秒钟内重建不可预测的时间,甚至超过60倍,超过了显示刷新率。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这完全没问题,因为let bot = message.client;实际上不是您强叫的!它总是由框架调用,这就是为什么它的调用频率不会超过60 Hz的原因。 之所以如此,是因为build在内部调用State.setState,它会执行以下操作:

  

调用setState会通知框架此对象的内部状态已更改,可能会影响此子树中的用户界面,这将导致框架为此{{ 3}}对象。

如果您想要更细粒度的控制,则可以基于build创建自己的State并在需要时调用RenderObjectmarkNeedsPaint