繁体   English   中英

Flutter:无状态小部件中的可变字段

[英]Flutter: Mutable fields in stateless widgets

StatelessWidget被标记为immutable 不过,我使用的scoped model ,这意味着我避免StatefulWidget和使用model来改变stateStatelessWidget 这导致我在StatelessWidgetnon-final fields ,这不会导致errors ,因为它只是一个warning 但我想知道是否有更好的方法?

无状态小部件应该只有 final 字段,没有例外 原因:当父widget由于某种原因(屏幕旋转、动画、滚动...)重建时,会调用parent的build方法,导致所有widget都被重建。

扩展StatefulWidget类必须遵循相同的规则,因为它们也是重构的。 在布局树中小部件的生命周期中,只有State可以包含可变字段。

没有理由避免StatefulWidget 它是 Flutter 的基本构建块。

事实上, ScopedModelDescendant也是一个有状态的小部件。 scoped_model 的主要好处是您可以将业务逻辑与小部件层分开。 它并没有消除对有状态小部件的需求。

将有状态小部件用于:

  • 将范围模型注入树(构建ScopedModel小部件的小部件)。 Model实例存储在State
  • 存储用户输入( TextEditingController ,复选框状态)
  • 需要AnimationController的动画小部件
  • 存储以Controller结尾的任何内容( TabControllerScrollController ,...)

使“页面”小部件(构建Scaffold小部件,可使用Navigator访问)有状态通常是一个好主意。 通常这些是作用域模型的宿主。

这是你的问题:

你认为有没有更好的方法来完成我想要的,同时保持“短类结构”来帮助我保持监督并能够从任何地方触发这些类的重建?

你在这里要求的 ↑ 似乎是另一种应该比 scoped model 更好的应用程序状态管理方法

如您所知,应用程序状态管理方法是一组技术,可让您作为开发人员:

  • 将数据与小部件绑定

反过来,将数据与小部件绑定可以帮助您作为开发人员:

  • 在每次更改绑定数据时自动重建小部件

也许,为此,您可以使用rxdart

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM