StreamBuilder动画

问题描述 投票:2回答:1

项目

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

因此,因为用户输入更新非常快,这迫使流购买程序多次重建,从而创建了动画效果。

代码

    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倍,超过了显示刷新率。

还有更好的方法吗?

flutter dart flutter-animation
1个回答
2
投票

这完全没问题,因为build实际上是您调用的[[not!它总是由框架调用,这就是为什么它的调用频率不会超过60 Hz的原因。这是正确的,因为StreamBuilder内部调用了State.setState,该调用将执行以下操作:

调用State.setState通知框架此对象的内部状态已经改变,可能会影响此子树中的用户界面,这会导致框架为此setState对象安排build

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

© www.soinside.com 2019 - 2024. All rights reserved.