属性更改时,Flutter Widget重新呈现如何工作?

时间:2020-01-12 07:24:38

标签: flutter dart widget flutter-bloc

我只是想知道当父窗口小部件的属性更改时Flutter窗口小部件如何工作。

比方说,我们有一个Parent Widget,它基于一些可变值或某些可听值(例如Bloc Pattern中的值)来呈现Widget。

return Scaffold(
  body: BlocBuilder<LocationBloc, LocationState>(builder: (context, state) {
    if (state is NewLocationState) {
      return Map(
        location: LatLng(state.latitude, state.longitude),
      );
    }
    return Container();
  }),
);

因此,在上面的代码中,NewLocationState每15秒附带新值。

我的问题是:这个Map小部件发生了什么?

Flutter是否每隔15秒用新的Map或与React类似的方式渲染全新的NewLocationState小部件,Flutter可以比较某种虚拟树中的更改,而仅更改现有{{ 1}},效率很高,应该减少内存消耗。

示例仅用于我的问题的参考/上下文。但我想整体了解Flutter Widget在属性更改时的行为。

欢呼

1 个答案:

答案 0 :(得分:3)

因此,在上面的代码中,NewLocationState每15秒就会出现一次新值。

Flutter是否每15秒渲染一次全新的Map Widget?

是的。窗口小部件不会以任何方式重用。

另一方面,在重新创建窗口小部件实例时,将保留其关联的StateElementRenderObjects(因为它们是可变的)。

由于正是这三个因素在Flutter应用中完成了所有工作,因此它实际上非常有效。