可以说我有一个方法onButtonPressed()
,它先调用方法a()
,然后再调用方法b()
。方法a()
和b()
都包含对setState()
的调用:
void onButtonPressed() {
...
a();
...
b();
}
void a() {
...
setState() {
...
}
}
void b() {
...
setState() {
...
}
}
两次调用setState()
是否会使受影响的组件呈现两次,还是经过Flutter优化以使这些组件仅呈现一次?
答案 0 :(得分:0)
如果您所有的setState
通话都发生在同一帧中,那么就没有问题。
窗口小部件将重建一次,并且只有一次。
一旦将某个小部件标记为需要构建,随后对setState
的所有调用将仅在计划好框架并完成构建之前调用回调。
答案 1 :(得分:0)
每次调用函数调用都会产生很小的开销,但这可以忽略不计。
这不会给框架带来额外的开销。
答案 2 :(得分:0)
您可以这样做
void onButtonPressed() {
...
a();
...
b();
setState((){});
}
所以您只在一个地方调用setState
答案 3 :(得分:-1)
如果a()和b()都是同步函数,则setstate将被调用一次。 (换句话说,只有一个setstate有效)
例如,如果其中之一包含异步操作,则放置一行:await Thread.sleep(1000);在函数b()的内部进入函数b()的设置状态之前,然后将首先调用a()的设置状态,并在一秒钟后调用b()的设置状态,这意味着屏幕将呈现两次。 / p>