setState 是否会在 flutter 中重建屏幕的整个 widget 树以及它与其他 State 管理相比如何

Nay*_*dwi 12 mobile state-management dart flutter

我有点困惑,我最近一直在研究flutter的状态管理,我想知道如果将自定义有状态小部件放置在无状态小部件中会发生什么,假设 widgetA (父级)是无状态小部件并且它有一个子 WidgetB这是一个有状态的小部件,另一个子 WidgetC 是一个无状态的小部件。

现在我的问题是:

  • 如果从 widgetB 调用 setState(),WidgetA、B 和 C 是否会重建?
  • 这与使用不同的状态管理技术(例如状态提供者、流构建器或 Bloc)相比如何?
  • 何时使用 setState()?
  • 结合多种状态管理技术是否明智?

如果您有可以帮助我理解的外部链接或资源,请提供

ped*_*ont 10

如果我说错了,请有人纠正我。

按顺序回答您的问题:

  1. 如果您调用setState()WidgetB,它会重建自身及其后代,无论它们是小部件Stateless还是Stateful小部件。

  2. 使用BLoC方法,大多数时候可以选择使用Stateful WidgetssetState()管理状态。在这种方法中,您将从UIevents中使用,它将转换为 BLoC 内的“状态”。该状态将被传递到流中。每次他们在正在收听的 Stream 上收听新值时,您的UI都会使用它来重建自身。这将触发重建自身及其后代。StreamBuildersStreamBuilder

  3. 如果您使用BLoCor Provider + Streams,我建议避免使用setState()and StatefulWidgets,也许有一些例外,例如 UI 事物,例如。动画。

  4. BLoC 是一种与Provider package. Even在内部BLoC package使用Provider

PS:而BLoC是一种用于管理应用程序的数据和状态的架构模式。提供程序“只是”一个包装器Inherited Widgets,有助于在整个 Widget 树中公开数据,而不是架构模式。

使用包来管理状态的体系结构模式解决方案的其他示例providerMobX