我正在学习Dart / flutter并尝试了解Widgets系统的工作原理。但我无法理解无状态小工具和有状态小工具之间的区别?比如我有按钮。它有什么类型?
让我们想象两个案例。 我发送文本到按钮,然后显示它。 我发送文本到按钮,它的颜色改变了。
如果我要创建不合适的Widget类型会是什么?
答案 0 :(得分:10)
有三种小部件,而不仅仅是2.
无状态小部件就像一个常量。这是不可改变的。如果您想要更改无状态窗口小部件显示的内容,则必须创建一个新窗口。
状态小部件正好相反。它们还活着并且可以与用户交互。有状态小部件可以访问名为setState
的方法,它基本上对框架说#34;您好,我想显示其他内容。你能重新描绘一下吗?"。
最后,继承的小部件是两个世界的混合体。它是不变的,无国籍的。但是另一个小部件(无论它是什么)可以订阅该继承的小部件。 这意味着当您用新的替换继承的窗口小部件时,将重新绘制已订阅旧窗口小部件的所有窗口小部件。
最后,通常会像控制器一样使用有状态小部件。 无状态小部件将像View一样使用。 继承的小部件将是您的配置文件或您的模型。
答案 1 :(得分:2)
根据flutter.io:
无状态小部件
无状态小部件是不可变的,这意味着它们的属性不能 改变 - 所有价值都是最终的。
有状态小部件
状态小部件维护可能在生命周期内发生变化的状态 小部件。实现有状态小部件至少需要两个 classes:1)一个StatefulWidget类,它创建一个2)a的实例 国家级。 StatefulWidget类本身是不可变的,但是 状态类在窗口小部件的生命周期内持续存在。
例如,如果您想在按下按钮时更改文本小部件中的文本,则必须使用StatefulWidget
,它将允许您更改变量的状态。
但是在StatelessWidget
你不能这样做,因为它不会保持状态。
This tutorial will help anyone who trying to understand these two
答案 2 :(得分:1)
查看Flutter Interactivity Tutorial。
如果您的窗口小部件的build
方法完全取决于其不可变的构造函数参数,则应使用StatelessWidget
,因为它们更简单。如果您想存储一些预期会随时间变异的持久性私有数据,请使用StatefulWidget
并将数据存储在State
上。