gpt4 book ai didi

flutter - setState 是否会在 flutter 中为屏幕重建整个小部件树,以及它与其他状态管理相比如何

转载 作者:行者123 更新时间:2023-12-03 04:13:29 25 4
gpt4 key购买 nike

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

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

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

    最佳答案

    如果我说错了,请有人纠正我。
    按顺序回答您的问题:

  • 如果您调用setState()WidgetB它会重建自己和它的后代,不管它们是否是 StatelessStateful小部件。
  • 使用 集团方法,大多数时候可以选择使用 Stateful WidgetssetState()管理状态。在这种方法中,您将使用 events来自 UI,它将在您的 BLoC 中转换为“状态”。这个状态将被传递到一个流中。您的 UI 将使用 StreamBuilders 进行自我重建每次他们在他们正在收听的 Stream 上收听新值时。这将触发 StreamBuilder重建自己和它的后代。
  • 如果您使用 BLoCProvider + Streams ,我建议避免使用 setState()StatefulWidgets ,也许有一些异常(exception),比如 UI 的东西,例如。动画。
  • BLoC 是一种与 Provider package 相得益彰的设计方法。 . BLoC package甚至使用 Provider内部。

  • P.S.:鉴于 BLoC是一种架构模式,用于管理应用程序的数据和状态。 Provider 只是 Inherited Widgets 的一个包装器。这有助于在整个 Widget 树中公开数据,而不是架构模式。
    使用 provider 来管理状态的架构模式解决方案的其他示例包是 MobX .

    关于flutter - setState 是否会在 flutter 中为屏幕重建整个小部件树,以及它与其他状态管理相比如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62834750/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com