Flutter:无状态小部件中的可变字段
Flutter: Mutable fields in stateless widgets
将class StatelessWidget
标记为immutable
。但是,我正在使用 scoped model
,这意味着我避免使用 StatefulWidget
并使用 model
来更改 StatelessWidget
中的 state
。这导致我在 StatelessWidget
中有 non-final fields
,这不会导致 errors
,因为它只是一个 warning
。但是我想知道有没有更好的方法?
无状态小部件应该只有最终字段,没有例外。原因:由于某些原因(屏幕旋转,动画,滚动...)重建父widget时,调用了parent的build
方法,导致所有widget被重建。
类 扩展 StatefulWidget
必须遵循相同的规则,因为它们也被重构。只有 State
,它可以包含可变字段,在布局树中的小部件的生命周期内被保留。
没有理由回避StatefulWidget
。它是 Flutter 的基本构建块。
其实ScopedModelDescendant
也是一个stateful widget。 scoped_model 的主要好处是您可以将业务逻辑与小部件层分开。它并没有消除对有状态小部件的需求。
将有状态小部件用于:
- 将作用域模型注入树(构建
ScopedModel
小部件的小部件)。将 Model
实例存储在 State
. 中
- 存储用户输入(
TextEditingController
,复选框状态)
- 需要
AnimationController
s 的动画小部件
- 存储以
Controller
结尾的任何内容(TabController
、ScrollController
、...)
使 "page" 小部件(构建 Scaffold
的小部件,可使用 Navigator
访问)有状态通常是个好主意。通常这些是作用域模型的宿主。
这是你的问题:
Do you think there is a better approach
to accomplish what I want while keeping
the "short class structure" that helps
me keep oversight and being able to trigger
rebuilds of those classes from anywhere?
您在这里要求的 ↑ 似乎是另一种应用状态管理方法,应该比作用域模型更好。
如您所知,应用程序状态管理方法 是一组让您作为开发人员的技术:
- 将数据与小部件绑定。
反过来,将数据与小部件绑定可以帮助您作为开发人员:
- 到 每次绑定数据更改时自动重建小部件。
或许,为此,您可以使用 rxdart:
在这里您会发现一些非常有用的应用状态管理方法列表,它们可以引导您采用更好的应用开发方式:
将class StatelessWidget
标记为immutable
。但是,我正在使用 scoped model
,这意味着我避免使用 StatefulWidget
并使用 model
来更改 StatelessWidget
中的 state
。这导致我在 StatelessWidget
中有 non-final fields
,这不会导致 errors
,因为它只是一个 warning
。但是我想知道有没有更好的方法?
无状态小部件应该只有最终字段,没有例外。原因:由于某些原因(屏幕旋转,动画,滚动...)重建父widget时,调用了parent的build
方法,导致所有widget被重建。
类 扩展 StatefulWidget
必须遵循相同的规则,因为它们也被重构。只有 State
,它可以包含可变字段,在布局树中的小部件的生命周期内被保留。
没有理由回避StatefulWidget
。它是 Flutter 的基本构建块。
其实ScopedModelDescendant
也是一个stateful widget。 scoped_model 的主要好处是您可以将业务逻辑与小部件层分开。它并没有消除对有状态小部件的需求。
将有状态小部件用于:
- 将作用域模型注入树(构建
ScopedModel
小部件的小部件)。将Model
实例存储在State
. 中
- 存储用户输入(
TextEditingController
,复选框状态) - 需要
AnimationController
s 的动画小部件
- 存储以
Controller
结尾的任何内容(TabController
、ScrollController
、...)
使 "page" 小部件(构建 Scaffold
的小部件,可使用 Navigator
访问)有状态通常是个好主意。通常这些是作用域模型的宿主。
这是你的问题:
Do you think there is a better approach to accomplish what I want while keeping the "short class structure" that helps me keep oversight and being able to trigger rebuilds of those classes from anywhere?
您在这里要求的 ↑ 似乎是另一种应用状态管理方法,应该比作用域模型更好。
如您所知,应用程序状态管理方法 是一组让您作为开发人员的技术:
- 将数据与小部件绑定。
反过来,将数据与小部件绑定可以帮助您作为开发人员:
- 到 每次绑定数据更改时自动重建小部件。
或许,为此,您可以使用 rxdart:
在这里您会发现一些非常有用的应用状态管理方法列表,它们可以引导您采用更好的应用开发方式: