gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:48:12 25 4
gpt4 key购买 nike

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

最佳答案

无状态小部件应该只有 final 字段,没有异常(exception)。原因:由于某些原因(屏幕旋转、动画、滚动...)重建父控件时,会调用父控件的build 方法,从而导致所有控件被重构。

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

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

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

将有状态小部件用于:

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

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

关于dart - Flutter:无状态小部件中的可变字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53192469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com