我注意到,我们可以使用StatefulWidget
来构建UI的任何部分,而不必担心状态。
我要问的是,首先,当我们可以将任何UI类构建为StatelessWidget
时,是否要为其提供StatefulWidget
,首先拥有State
的原因是什么?
使用StatefulWidget
是否会带来额外的费用,从而使使用StatelessWidget
创建无状态 UI变得更容易/更快/更好吗?
当我阅读文档时,我无法确切指出在描述无状态UI组件时使用StatelessWidget
和StatefulWidget
之间的区别。 It is even recommended to
最佳答案
如果窗口小部件管理状态,则应将StatefulWidget
与关联的State
对象一起使用以存储状态。
如果您的小部件不管理任何状态,并且其构建方法仅取决于其构造函数参数(或Inherited
小部件,例如Theme
),则最好使用StatelessWidget
。 StatelessWidget
需要定义更少的类并调用更少的方法,因此与不缓存任何状态的等效StatefulWidget
相比,它应该更快,更可维护。
如果您遵循Push the state to the leaves性能优化,则将StatefulWidget
更改为StatelessWidget
,并将有状态部分分解为更简单的StatefulWidget
(可以使用child
参数并将其缓存)。这种模式增加了更多的类,但是具有减少状态更改时所需的工作量的好处。