嗨, 我用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倍,超过了显示刷新率。
有更好的方法吗?
答案 0 :(得分:2)
这完全没问题,因为let bot = message.client;
实际上不是您强叫的!它总是由框架调用,这就是为什么它的调用频率不会超过60 Hz的原因。
之所以如此,是因为build
在内部调用State.setState
,它会执行以下操作:
调用setState会通知框架此对象的内部状态已更改,可能会影响此子树中的用户界面,这将导致框架为此{{ 3}}对象。
如果您想要更细粒度的控制,则可以基于build创建自己的State并在需要时调用RenderObject
或markNeedsPaint
。