班级
StatelessWidget
标记为immutable
。但是,我正在使用 scoped model
,这意味着我避免了 StatefulWidget
并使用 model
来更改 state
中的 StatelessWidget
。这导致我在 non-final fields
中有 StatelessWidget
,这不会导致 errors
,因为它只是一个 warning
。但我想知道是否有更好的方法?
无状态小部件应该只具有最终字段,无例外。原因:当父级 widget 由于某种原因(屏幕旋转、动画、滚动...)而被重建时,父级的
build
方法会被调用,这会导致所有 widget 被重建。
扩展
StatefulWidget
的类必须遵循相同的规则,因为它们也会被重建。在布局树中小部件的生命周期中,仅保留可包含可变字段的 State
。
没有理由避免
StatefulWidget
。它是 Flutter 的基本构建块。
事实上,
ScopedModelDescendant
也是一个Stateful widget。 scoped_model 的主要好处是您可以将业务逻辑与小部件层分开。它并没有消除对有状态小部件的需求。
将有状态小部件用于:
ScopedModel
小部件的小部件)。将 Model
实例存储在 State
中。TextEditingController
,复选框的状态)AnimationController
sController
结尾的任何内容(TabController
、ScrollController
、...)将“页面”小部件(构建
Scaffold
的小部件,可使用 Navigator
访问)设为有状态通常是一个好主意。通常这些是范围模型的主机。
这是你的问题:
您认为有更好的方法吗 完成我想要的事情,同时保持 “短班级结构”有帮助 我保持监督并能够触发 从任何地方重建这些类?
您在这里要求的↑似乎是另一种应用程序状态管理方法,它应该比作用域模型更好。
如您所知,应用程序状态管理方法是一组允许您作为开发人员的技术:
:
应用程序状态管理方法列表,它们可以引导您找到更好的应用程序开发方式: