单击下图中的任何点时,我想显示一些与该点有关的信息。但是,当我使用setState
方法更新有关click事件的以下信息时,该图将被重建。我想在此时间序列图中的某个时间放大,但是重建图是一个问题,无法在图上看到标签。如何使用setState
方法更新以下信息而不重绘图形?
在下面的图片中,Angle
的值应该为15.0
,而没有setState
的值就不会更新
答案 0 :(得分:2)
要停止重建某些小部件,我要做的就是将其移到其自己的有状态小部件中。因此,当它是父级重建时,它将不会重建。为了在它们之间进行通信,我使用了回调函数或块模式。因此,您可以做的是将图形移至单独的有状态小部件,并在cilck事件上将数据通过功能回调传递给其父级。
答案 1 :(得分:0)
最好使用 StreamBuilder,请参阅有关它的 youtube 视频。
答案 2 :(得分:-1)
您可以将Provider小部件及其Consumer模式使用,以减少更改时重建树的哪些部分。
答案 3 :(得分:-1)
您可以用StatefulBuilder包装小部件:
一个柏拉图式小部件,既具有状态又调用一个闭包以获取 其子小部件。
传递给构建器的StateSetter函数用于调用 重建而不是典型的State.setState。
以下是文档中的示例:
await showDialog<void>( context: context, builder: (BuildContext context) { int selectedRadio = 0; return AlertDialog( content: StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return Column( mainAxisSize: MainAxisSize.min, children: List<Widget>.generate(4, (int index) { return Radio<int>( value: index, groupValue: selectedRadio, onChanged: (int value) { setState(() => selectedRadio = value); }, ); }), ); }, ), ); }, );
答案 4 :(得分:-2)
您的问题是基于一个误解。
您要求的是“不要再在XX小部件上调用build
”。
但是您正在寻找的是两个不被调用的方法:
setState
对此没有影响。
调用setState
不一定会重新绘制关联的窗口小部件树。同样也是如此,不需要setState
来重新绘制小部件树。
您正在寻找的是RepaintBoundary之类的东西,它允许部分树在不需要时不重新绘制。