屏幕应该是无状态的还是有状态的?

Tad*_*tis 3 dart flutter

我正在开发一个有很多屏幕和页面的应用程序。我在某处读到过,您应该尽可能使用无状态小部件。

这是为什么?

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

小智 6

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

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

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


ale*_*pfx 5

总是从创建一个无状态小部件开始并使用它,直到我必须更改某些状态。因此,我可以快速使用“Alt-Enter/ Convert to a Statefull”从 Intellij/AS 将其更改为有状态。(做相反的事情并不那么容易,所以......)。

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

flutter 文档中的这篇文章展示了有关处理 flutter 应用程序中状态更改的有趣提示: