繁体   English   中英

无状态和有状态小部件之间有什么区别?

[英]What difference between stateless and stateful widgets?

我正在学习Dart / flutter并试图了解Widgets系统的工作原理。 但我无法理解无状态小工具和有状态小工具之间的区别? 比如我有按钮。 它有什么类型?

让我们想象两个案例。 我发送文本到按钮,然后显示它。 我发送文本到按钮,它的颜色改变了。

如果我创建不合适的Widget类型会是什么?

有3种小部件,而不仅仅是2种。

  • 有状态的小部件
  • 无状态小部件
  • 继承的小部件

无状态小部件就像一个常量。 这是不可改变的。 如果要更改无状态窗口小部件显示的内容,则必须创建新窗口小部件。

有状态的小部件正好相反。 它们还活着并且可以与用户交互。 状态小部件可以访问名为setState的方法,该方法基本上对框架说“你好,我想显示其他内容。你能重新绘制我吗?”。

最后,Inherited widget是两个世界的混合体。 它是不变的,无国籍的。 但是另一个小部件(无论它是什么)可以订阅该继承的小部件。 这意味着当您用新的替换继承的窗口小部件时,将重新绘制已订阅旧窗口小部件的所有窗口小部件。

最后,通常会像控制器一样使用有状态小部件。 无状态小部件将像View一样使用。 继承的小部件将是您的配置文件或您的模型。

根据flutter.io

无状态小部件

无状态小部件是不可变的,这意味着它们的属性不能改变 - 所有值都是最终的。

这是doc

有状态的小部件

有状态窗口小部件维护可能在窗口小部件生命周期内发生更改的状态。 实现有状态窗口小部件至少需要两个类:1)一个StatefulWidget类,它创建一个2)State类的实例。 StatefulWidget类本身是不可变的,但State类在窗口小部件的生命周期内持久存在。

例如,如果要在按下按钮时更改文本小部件中的文本,则必须使用StatefulWidget ,它将允许您更改变量的状态。

但是在StatelessWidget你不能这样做,因为它不会保持状态。

从doc获取更多信息

本教程将帮助那些试图理解这两者的人

查看Flutter Interactivity Tutorial

如果你的widget的build方法完全依赖于它的不可变构造函数参数,你应该使用StatelessWidget因为它们更简单。 如果要存储一些预期会随时间变化的持久私有数据,请使用StatefulWidget并将数据存储在State

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM