【问题标题】:Is it good practice to wrap StatefulWidgets inside StatelessWidgets?将有状态小部件包装在无状态小部件中是一种好习惯吗?
【发布时间】:2020-03-10 14:15:50
【问题描述】:

我知道StatelessWidgets 没有状态会在稍后阶段改变,而StateFulWidgets 确实如此。那么在有状态小部件中只保留可更改部分,然后在无状态小部件中与 UI 的其余部分一起使用它是不是一个好主意?

例如,如果我有一个带有日期选择器的页面,那么我需要有一个有状态的小部件来保存该日期控件,但实际使用所选日期的 UI 的其余部分不会改变。那么它会提供更多的性能,尤其是 w.r.t.如果我将日期控制为有状态小部件并将其保存在无状态小部件中,小部件重建透视图?我的意思是在这种情况下,选择日期时父小部件会重建吗?

【问题讨论】:

  • 奇怪和过早的优化
  • @GenchiGenbutsu 你介意解释一下你为什么这么认为吗

标签: performance flutter


【解决方案1】:

是的,出于优化目的,可以将有状态小部件放入无状态小部件中。当有状态小部件重绘时,无状态小部件将保持不变。

【讨论】:

    【解决方案2】:

    谢谢你的好问题!

    答案是使用Provider 包并将需要更改的小部件包装在Consumer 小部件中。它会侦听更改并根据您的需要重新构建,而无需重新构建整个小部件树。

    这个视频解释得很好:https://www.youtube.com/watch?v=MkFjtCov62g

    【讨论】:

      【解决方案3】:

      这样做是个好习惯。 事实上,Flutter 默认的应用代码就是这样使用的。

      【讨论】:

        猜你喜欢
        • 2021-09-21
        • 2021-12-15
        • 2021-06-11
        • 2018-09-01
        • 1970-01-01
        • 2021-08-29
        • 2020-10-19
        • 2021-02-16
        • 2020-01-23
        相关资源
        最近更新 更多