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

问题描述 投票:0回答:2

班级

StatelessWidget
标记为
immutable
。但是,我正在使用
scoped model
,这意味着我避免了
StatefulWidget
并使用
model
来更改
state
中的
StatelessWidget
。这导致我在
non-final fields
中有
StatelessWidget
,这不会导致
errors
,因为它只是一个
warning
。但我想知道是否有更好的方法?

dart flutter state immutability statelesswidget
2个回答
9
投票

无状态小部件应该只具有最终字段,无例外。原因:当父级 widget 由于某种原因(屏幕旋转、动画、滚动...)而被重建时,父级的

build
方法会被调用,这会导致所有 widget 被重建。

扩展

StatefulWidget
的类必须遵循相同的规则,因为它们也会被重建。在布局树中小部件的生命周期中,仅保留可包含可变字段的
State

没有理由避免

StatefulWidget
。它是 Flutter 的基本构建块。

事实上,

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

将有状态小部件用于:

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

将“页面”小部件(构建

Scaffold
的小部件,可使用
Navigator
访问)设为有状态通常是一个好主意。通常这些是范围模型的主机。


0
投票

这是你的问题:

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

您在这里要求的↑似乎是另一种应用程序状态管理方法,它应该比作用域模型更好

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

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

    每次更改绑定数据时自动重建小部件
  • 也许,为此目的,您可以使用
rxdart

    Pub.Dev 上的 RXDart
  • GitHub.Com 上的 RXDart
  • 在这里您会发现一些非常有用的
应用程序状态管理方法列表

,它们可以引导您找到更好的应用程序开发方式:

    Flutter.Dev 的应用状态管理
© www.soinside.com 2019 - 2024. All rights reserved.