当前位置: 首页 > 知识库问答 >
问题:

Flutter中有状态和无状态小部件之间的关系是什么?

羊舌新荣
2023-03-14

有状态小部件被定义为在其生命周期内改变其状态的任何小部件。但是,StatefulWidgetStatefulWidget作为它的一个子元素是非常常见的做法。如果StatefulWidget作为其子元素之一,无状态widget,它不是变成有状态的吗?

我试图将文档作为无状态Widget代码的一部分进行查看,但无法弄清楚无状态Widget如何具有状态widget作为其子级,并且仍然保持无状态Widget

Flutter中有状态和无状态小部件之间的关系和区别是什么?

共有3个答案

郭麒
2023-03-14

正如Flutter文档中提到的

有什么意义?

有些小部件是有状态的,有些是无状态的。如果一个小部件发生了变化,用户与它进行交互,例如,它是有状态的。小部件的状态由可以更改的值组成,如滑块的当前值或是否选中复选框。控件的状态存储在状态对象中,将控件的状态与其外观分离。当小部件的状态发生变化时,状态对象调用setState(),告诉框架重新绘制小部件。

无状态小部件没有要管理的内部状态。Icon、IconButton 和 Text 是无状态小部件的示例,它们是 StatelessWidget 的子类。

有状态小部件是动态的。用户可以与有状态的小部件交互(例如,通过在表单中键入内容,或者移动滑块),或者它会随着时间的推移而改变(可能是数据馈送导致UI更新)。Checkbox、Radio、Slider、InkWell、Form和TextField都是有状态小部件的例子,它们是StatefulWidget的子类。

https://flutter.io/tutorials/interactive/#stateful-stateless

解阳泽
2023-03-14

从留档flutter.io:

...这里要注意的重要一点是,无状态小部件和有状态小部件的核心行为是相同的。它们重建每个帧,不同之处在于有状态Widget有一个状态对象,该对象跨帧存储状态数据并恢复它。

如果你有疑问,那么永远记住这条规则:如果一个小部件改变了(例如,用户与它交互),它就是有状态的。然而,如果子部件对变化做出反应,如果父部件没有对变化做出反应,包含父部件的父部件仍然可以是无状态部件。

陈昊昊
2023-03-14

无状态节点永远不会自行重建(但可以从外部事件重建)。有状态的智者可以。这是黄金法则。

但任何类型的小部件都可以随时重新绘制。

无状态仅意味着其所有属性都是不可变的,并且更改它们的唯一方法是创建该小部件的新实例。例如,它不会锁定小部件树。

但是你不应该关心你的孩子是什么类型的。对你没有任何影响。

 类似资料:
  • 问题内容: 我试图了解React的有状态和无状态组件之间的确切区别。好的,无状态组件只会做某事,但是什么也不会记住,而有状态组件可能会做同样的事情,但是它们会记住其中的内容。那是理论。 但是现在,在检查如何使用代码显示此内容时,我有点麻烦了。以下两个示例对吗?唯一的区别确实是函数的定义。 无状态组件的示例: 有状态组件的示例: 问题答案: 是的,那是有区别的。除了有 状态 组件,您还可以使用以下方

  • 我正在尝试创建一个非常简单的应用程序,当点击中心小部件时,列表中的元素会显示出来。 这是我的代码: 没有显示任何错误,但同时,我的目标没有达到,因为没有显示任何文本,即使我添加了这个代码打印(yourList[randomIndex]),也不会在终端中打印任何内容;。我如何显示文本,并使打印出现?

  • 我正在学习j2ee,如果问题看起来很基本请原谅。 在httpsession中,会话ID存储在客户端,与之相关的数据存储在服务器端。 现在,当我在POJO上使用CDI@SessionScoped时,这是否意味着EJB容器(?)在会话中存储pojo。(Session.SetAttribute(POJO)) CDI可以区分SFB、SLB和POJO吗?

  • 本文向大家介绍描述下在react中无状态组件和有状态组件的区别是什么?相关面试题,主要包含被问及描述下在react中无状态组件和有状态组件的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 1,无状态组件主要用来定义模板,接收来自父组件props传递过来的数据,使用{props.xxx}的表达式把props塞到模板里面。无状态组件应该保持模板的纯粹性,以便于组件复用。创建无状态组件如下: v

  • 在接口流中: 中间操作可分为有状态和无状态。它们影响并行流的结果。 只有两个终端操作是非确定性方法:findAny()和forEach(Consumer)。它们影响并行流的结果。 如果中间无状态操作执行惰性操作,它们可能会产生副作用。这会影响并行Stream的结果。 中间操作可分为以下几类: 有状态 不同的() 排序() 极限(长l) 跳过(长l) 无国籍 地图(功能f) 以下是我的两个问题: >