【问题标题】:Should screens be Stateless or Stateful?屏幕应该是无状态的还是有状态的?
【发布时间】:2019-06-14 22:14:47
【问题描述】:

我正在开发一个包含大量屏幕和页面的应用。我在某处读到您应该尽可能使用无状态小部件。

为什么会这样?

如果我有很多屏幕,它们应该是无状态的吗?然后里面的内容是有状态的?让屏幕和小部件都处于有状态状态会更好吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你应该问自己一些关于屏幕/页面的问题,以决定它是无状态的还是有状态的。

    • 最明显的,它需要改变状态吗?
    • 是否需要调用 initState、didChangeDependencies 或其他生命周期方法?

    在不需要时进行有状态的做法是一种不好的做法。一个好主意可能是始终作为无状态小部件开始,如果需要,您可以使用 Alt + Enter 快捷方式(Android Studio)轻松将其更改为有状态。

    【讨论】:

    • 如果您需要更新 Stateless 小部件中的某些内容,您可以使用 Provider 类和 Consumer 小部件仅更新您需要更新的部分,而无需使用 Stateless 小部件。这个视频很好地解释了它:youtube.com/watch?v=MkFjtCov62g
    【解决方案2】:

    总是首先创建一个无状态小部件并使用它,直到我必须更改某些状态。所以我可以快速使用 `Alt-Enter/ Convert to a Statefull from Intellij/AS 将其更改为有状态。 (做逆不是那么容易,所以...)。

    此外,如果您使用带有一些异步机制的 Stateful 小部件,例如流,您可以构建一次小部件并使用流来更新您需要的信息,它不会对您的应用程序的性能产生太大影响。但是如果你多次调用 setState,这可能会降低你的应用程序,因为对于每个 setState,Widget 树都会被重建。

    这个article from the flutter 文档展示了关于在 Flutter 应用中处理状态变化的有趣技巧:

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多