如果仅在StatelessWidget上使用StatefullWidget,反之亦然,会对性能产生影响吗?
[在我看来,我们仅使用StatefullWidget
来进行某些操作,例如使用setState()
更新UI的一部分,有一种方法可以在initState()
中设置一些代码,并在dispose()
函数中进行处理。因此,当我不需要这些东西时,请继续使用StatelessWidget
。
但是这两个最常用的小部件之间的实际性能影响是什么?
stateless
和stateful
小部件之间会有性能变化。
有状态小部件背后的原因是消耗内存。
State.setState
或依赖于InheritedWidgets
的窗口小部件通常在应用程序的生命周期内会多次重建,因此,将重建此窗口小部件的影响降至最低至关重要。 (它们也可以使用State.initState或State.didChangeDependencies并分配资源,但重要的是它们可以重建。)在性能方面,StatelessWidget
几乎与StatefulWidget
为空State
相同。
写作:
class Example extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container();
}
}
或:
class Example extends StatefulWidget {
@override
_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
@override
Widget build(BuildContext context) {
return Container();
}
}
不会对您的应用程序的性能产生任何明显的影响。
这里使用StatelessWidget
时确实获得了很小的收益。但是它太小了:
它们之间的区别可以概括为调用空函数与不调用空函数。是的,但绝对没有关系。
简单地,如果屏幕是静态的,我们使用StatelessWidget(低内存对象),而当屏幕是动态的时,我们使用StatefulWidget(重于无状态)。
因此,这取决于用例。您也可以在无状态小部件中使用provider或bloc来更新小部件。
因此,如果您可以选择使用无状态,则不要在其中使用有状态。
Flutter尝试将自己设置为60 FPS,但是如果经常执行setState周围有很多有状态的小部件,则可能会导致一些问题。另一方面,太多的无状态不会成为problem。
您不能使用有状态的小部件来编辑StatelessWidget