StatefullWidget和StatelessWidget关于性能的区别是什么?

问题描述 投票:2回答:4

如果仅在StatelessWidget上使用StatefullWidget,反之亦然,会对性能产生影响吗?

[在我看来,我们仅使用StatefullWidget来进行某些操作,例如使用setState()更新UI的一部分,有一种方法可以在initState()中设置一些代码,并在dispose()函数中进行处理。因此,当我不需要这些东西时,请继续使用StatelessWidget

但是这两个最常用的小部件之间的实际性能影响是什么?

flutter flutter-layout
4个回答
0
投票

statelessstateful小部件之间会有性能变化。

有状态小部件背后的原因是消耗内存。

  • 使用State.setState或依赖于InheritedWidgets的窗口小部件通常在应用程序的生命周期内会多次重建,因此,将重建此窗口小部件的影响降至最低至关重要。 (它们也可以使用State.initState或State.didChangeDependencies并分配资源,但重要的是它们可以重建。)

参考:-Performance considerations


0
投票

在性能方面,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时确实获得了很小的收益。但是它太小了:

它们之间的区别可以概括为调用空函数与不调用空函数。是的,但绝对没有关系。


-1
投票

简单地,如果屏幕是静态的,我们使用StatelessWidget低内存对象),而当屏幕是动态的时,我们使用StatefulWidget重于无状态)。

因此,这取决于用例。您也可以在无状态小部件中使用provider或bloc来更新小部件。

因此,如果您可以选择使用无状态,则不要在其中使用有状态。

Flutter尝试将自己设置为60 FPS,但是如果经常执行setState周围有很多有状态的小部件,则可能会导致一些问题。另一方面,太多的无状态不会成为problem


-2
投票

您不能使用有状态的小部件来编辑StatelessWidget

© www.soinside.com 2019 - 2024. All rights reserved.