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