我正在学习Dart/flutter并试图了解Widgets系统的工作原理.但我无法理解无状态小工具和有状态小工具之间的区别?比如我有按钮.它有什么类型?
让我们想象两个案例.我发送文本到按钮,然后显示它.我发送文本到按钮,它的颜色改变了.
如果我创建不合适的Widget类型会是什么?
Rém*_*let 14
有3种小部件,而不仅仅是2种.
无状态小部件就像一个常量.这是不可改变的.如果要更改无状态窗口小部件显示的内容,则必须创建新窗口小部件.
有状态的小部件正好相反.它们还活着并且可以与用户交互.状态小部件可以访问一个名为的方法setState,它基本上对框架说"你好,我想显示其他东西.你能重新绘制我吗?".
最后,Inherited widget是两个世界的混合体.它是不变的,无国籍的.但是另一个小部件(无论它是什么)可以订阅该继承的小部件.这意味着当您用新的替换继承的窗口小部件时,将重新绘制已订阅旧窗口小部件的所有窗口小部件.
最后,通常会像控制器一样使用有状态小部件.无状态小部件将像View一样使用.继承的小部件将是您的配置文件或您的模型.
查看Flutter 交互教程。
如果您的小部件的build方法完全取决于其不可变的构造函数参数,您应该使用 a,StatelessWidget因为它们更简单。如果您想存储一些您希望随时间发生变化的持久私有数据,请使用 aStatefulWidget并将数据存储在State.
根据flutter.io:
无状态小部件
无状态小部件是不可变的,这意味着它们的属性无法更改-所有值都是最终值。
有状态的小部件
有状态的小部件维持在小部件的生命周期中可能会改变的状态。实现有状态窗口小部件至少需要两个类:1)创建实例的StatefulWidget类; 2)状态类。StatefulWidget类本身是不可变的,但是State类在微件的整个生命周期内都保持不变。
例如,如果您想在按下按钮时更改文本小部件中的文本,则必须使用StatefulWidget它,它可以让您更改变量的状态。
但是StatelessWidget您不能这样做,因为它不能保持状态。
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |