使用StatelessWidget的原因是什么?

时间:2017-09-08 00:33:24

标签: flutter

我注意到,我们可以使用StatefulWidget来构建UI的任何部分,而不必担心状态。

我问的问题很简单,首先有StatelessWidget的原因是什么,当我们可以将任何UI类构建为StatefulWidget时,无论我们是否要提供它是State还是没有?

使用StatefulWidget是否需要额外费用才能使用StatelessWidget更轻松/更快/更好地创建无状态用户界面?

当我阅读文档时,我无法确切地指出在描述无状态UI组件时使用StatelessWidgetStatefulWidget之间的区别。 It is even recommended to

  

考虑将无状态窗口小部件重构为有状态窗口小部件   它可以使用StatefulWidget中描述的一些技术......

1 个答案:

答案 0 :(得分:2)

如果您的窗口小部件管理状态,则应使用StatefulWidget和关联的State对象来存储状态。

如果您的窗口小部件不管理任何状态,并且其构建方法仅取决于其构造函数参数(或Inherited小部件,如Theme),则最好使用它一个StatelessWidgetStatelessWidget需要定义更少的类并调用更少的方法,因此它应该比不在其状态下缓存任何内容的等效StatefulWidget更快,更易于维护。

如果您遵循Push the state to the leaves效果优化,则会将StatefulWidget更改为StatelessWidget,并将有状态部分分解为更简单的StatefulWidget(可能需要一个child参数并缓存它)。这种模式增加了更多的类,但有利于减少状态变化时所需的工作量。