[英]What is the relation between stateful and stateless widgets in Flutter?
[英]Flutter: Mutable fields in stateless widgets
类StatelessWidget
被标记为immutable
。 不过,我使用的scoped model
,这意味着我避免StatefulWidget
和使用model
来改变state
的StatelessWidget
。 这导致我在StatelessWidget
有non-final fields
,这不会导致errors
,因为它只是一个warning
。 但我想知道是否有更好的方法?
无状态小部件应该只有 final 字段,没有例外。 原因:当父widget由于某种原因(屏幕旋转、动画、滚动...)重建时,会调用parent的build
方法,导致所有widget都被重建。
扩展StatefulWidget
类必须遵循相同的规则,因为它们也是重构的。 在布局树中小部件的生命周期中,只有State
可以包含可变字段。
没有理由避免StatefulWidget
。 它是 Flutter 的基本构建块。
事实上, ScopedModelDescendant
也是一个有状态的小部件。 scoped_model 的主要好处是您可以将业务逻辑与小部件层分开。 它并没有消除对有状态小部件的需求。
将有状态小部件用于:
ScopedModel
小部件的小部件)。 将Model
实例存储在State
。TextEditingController
,复选框状态)AnimationController
的动画小部件Controller
结尾的任何内容( TabController
, ScrollController
,...) 使“页面”小部件(构建Scaffold
小部件,可使用Navigator
访问)有状态通常是一个好主意。 通常这些是作用域模型的宿主。
这是你的问题:
你认为有没有更好的方法来完成我想要的,同时保持“短类结构”来帮助我保持监督并能够从任何地方触发这些类的重建?
你在这里要求的 ↑ 似乎是另一种应该比 scoped model 更好的应用程序状态管理方法。
如您所知,应用程序状态管理方法是一组技术,可让您作为开发人员:
反过来,将数据与小部件绑定可以帮助您作为开发人员:
也许,为此,您可以使用rxdart :
在这里,您会找到一些非常有用的应用状态管理方法列表,它们可以引导您获得更好的应用开发方式:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.