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