嗨,我用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倍,超过了显示刷新率。
还有更好的方法吗?
这完全没问题,因为build
实际上是您调用的[[not!它总是由框架调用,这就是为什么它的调用频率不会超过60 Hz的原因。这是正确的,因为StreamBuilder
内部调用了State.setState
,该调用将执行以下操作:
调用State.setState
通知框架此对象的内部状态已经改变,可能会影响此子树中的用户界面,这会导致框架为此setState对象安排build。
如果需要更细粒度的控制,则可以基于State创建自己的RenderObject
并在需要时调用RenderObject
或markNeedsPaint
。