![](/img/trans.png)
[英]What is the relation between stateful and stateless widgets in Flutter?
[英]Why do we need stateless widgets if the same can be achieved by stateful widgets in flutter?
我是 flutter 世界的新手,我最近学习了(或者我认为我学习了)有状态和无状态小部件,这是 flutter 小部件的基础。
我们将无状态小部件用于不在显示器上重绘的事物(如文本、按钮等),但有状态小部件可以自行重绘。
所以我的问题是,如果有状态小部件可以用来绘制无状态小部件可以绘制的相同类型的小部件,为什么我们需要无状态小部件?
或者是否有任何特定原因在 flutter 中使用无状态小部件而不是有状态小部件? 或者我们可以一直使用有状态的小部件而不是只能绘制一次内容的无状态小部件吗?
谢谢,对不起,如果这是一个愚蠢的问题。
那么问题不是无状态和有状态之间的区别。 我知道区别,但是仅使用有状态小部件的影响是什么,因为通过使用它我们还可以实现无状态小部件可以做的大部分事情那么为什么我们需要无状态小部件?它在 flutter 环境中的重要性是什么?的应用程序会不时重新绘制?
是的,StatefulWidget 可以重建。 这通常发生在使用 Inheritedwidgets 时。
StatelessWidget 的存在是为了将大的小部件树拆分为较小的可重用小部件。
您可能会想“但我可以为此使用 StatefulWidget 或函数”。 这是真的,但不完全是:
key
和覆盖 ==。 因此它们的性能可能会降低或引入错误。每次我们使用Stateful小部件时,都会创建一个状态对象。 如果我们使用所有有状态的小部件,就会有很多不必要的状态对象,这会消耗大量内存。 所以在我们不需要改变状态的地方,我们应该使用更简单的——无状态小部件。
使用无状态小部件而不是有状态小部件的另一个原因是有状态小部件带有一个巨大的样板,根据Flutter API 文档使用一堆嵌套的有状态小部件,通过所有这些构建方法和构造函数传递数据可能会变得很麻烦。
从理论上讲,我认为你可以在任何地方使用有状态的小部件,但你的整个程序会更重并且会有很多冗余。 也就是说,我不认为使用无状态小部件比有状态小部件有任何优势。
这是我的理解...
当您使用有状态小部件并重绘它时,内部的所有其他小部件也将被重绘。 因此,我们尝试使用无状态小部件,以免重绘其中的其他小部件,但您知道我们通常需要更改屏幕上的数据,并且它应该发生在“单个小部件”中,并且该小部件应该是一个有状态小部件尽可能少地使用计算能力。
现在......我猜你在想:“但如果我只使用有状态的小部件而不重绘它们呢?” 好吧,如您所知,当您使用有状态小部件时,您有两个类:小部件和状态。 我已经知道,当您声明一个状态时,您会告诉手机无论是否重绘小部件,都将这个状态保存并保存在内存中,因此您可以无缘无故地使用手机内存,因为您不需要重绘它的小部件。
我们应该考虑总是使用无状态小部件,因为它们比有状态小部件更轻,我们应该始终使我们的有状态小部件在我们的应用程序中最小,以便在应用程序的小部件树中重绘尽可能少的小部件。
我希望我有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.