【问题标题】:One big StatefulWidget or multiple small StatefulWidgets一个大的 Stateful Widget 或多个小的 Stateful Widget
【发布时间】:2021-06-08 02:33:27
【问题描述】:

我的 UI 有 20 多个需要同时更新的小部件,而一些小部件保持无状态。我想知道更新整个 UI 是否比单独更新每个 UI 更有效。

在更广泛的范围内,我是否应该始终选择不更新多个小的 StatefulWidgets 而不是整个 UI,无论小部件的数量如何,考虑到小部件将同时更新?如果没有,有什么好的衡量标准我可以用来知道我应该如何做出这个决定?

【问题讨论】:

标签: flutter dart statefulwidget


【解决方案1】:

取决于您的需求

请记住,一切都是有代价的,请尝试仅将StatefulWidget 用于动态小部件。我经常使用单个 StatefulWidget,因为只有在 StatefulWidget 上,我们才能有很好的紧凑状态管理,同时为不需要状态管理的子组件使用无状态小部件(无状态)。

值得再次检查 flutter.dev 以刷新我们对 StatefulWidget 工作原理https://flutter.dev/docs/development/ui/interactive 的看法。因为如果您担心性能,您还需要避免使用 setState() 进行小的更新,而您的页面包含很多子项,因为每次触发 setState(),您的小部件树都会被重建。

另外,如果您正在构建更复杂的应用程序,请查看https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple 这会更加高效和性能友好,因为有了提供程序,我们可以只专注于动态小部件,并让所有内容保持静态,即使所有内容都写在 StatefullWidget 之上.

【讨论】:

    【解决方案2】:

    从性能的角度来看,在需要时单独更新每个小部件总是明智的。

    假设您已将所有小部件合并为一个。现在,如果您只需要更新一个文本(假设之前是一个小部件),Flutter 必须更新整个大小部件,只需进行一次最小的更改。尽管 Flutter 不会抱怨这一点,因为 Flutter 的重新渲染速度非常快,但这取决于小部件本身的机制,这可能会导致跳帧/滞后问题。

    在另一种情况下,如果所有小部件都具有各自的功能,Flutter 只需销毁需要更新的单个小部件并重新渲染它。所以渲染一个小部件比一次渲染 20 多个小部件要快得多。

    我希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 2021-09-26
      • 1970-01-01
      • 2022-12-02
      • 2020-08-02
      • 2019-07-26
      • 2020-07-02
      • 2021-02-20
      相关资源
      最近更新 更多