Flutter:调用setState()多次效率低下吗?

时间:2019-01-31 11:57:54

标签: flutter

可以说我有一个方法onButtonPressed(),它先调用方法a(),然后再调用方法b()。方法a()b()都包含对setState()的调用:

void onButtonPressed() {
    ...
    a();
    ...
    b();
}

void a() {
    ...
    setState() {
        ...
    }
}

void b() {
    ...
    setState() {
        ...
    }
}

两次调用setState()是否会使受影响的组件呈现两次,还是经过Flutter优化以使这些组件仅呈现一次?

4 个答案:

答案 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>