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,复选框状态)
  • 需要 AnimationControllers
  • 的动画小部件
  • 存储以 Controller 结尾的任何内容(TabControllerScrollController、...)

使 "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:

在这里您会发现一些非常有用的应用状态管理方法列表,它们可以引导您采用更好的应用开发方式: