当 Flutter Widget 的属性发生变化时,它如何重新渲染?

How does Flutter Widget rerender works when it's properties change?

我只是想知道当 Parent widget 的属性发生变化时 Flutter Widget 是如何工作的。

假设我们有一个 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 Widget 与 new NewLocationState 或类似于 React,Flutter 可以比较某种虚拟树中的变化并且只改变现有的属性Map 这是高效的,应该会减少内存消耗。

Bloc 示例仅用于 reference/context 我的问题。但我想了解当属性发生变化时 Flutter Widget 的整体行为。

干杯

So in code above, the NewLocationState comes every 15 sec with new values.

Does Flutter renders a completely new Map Widget every 15sec?

是的。小部件不会以任何方式重复使用。

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

由于是这三者完成了 Flutter 应用程序中的所有工作,因此它实际上非常高效。