首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StatelessWidgets对StatefulWidget

StatelessWidgets对StatefulWidget
EN

Stack Overflow用户
提问于 2017-09-08 02:10:19
回答 2查看 617关注 0票数 1

StatelessWidget的所有代码都在一个类中,甚至在build方法中。对于StatefulWidget,为什么State是一个独立于Widget的类?它们不能结合在一起吗?StatefulWidget可以直接调用setState本身吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 02:59:57

StatefulWidget类是不可变的,并将其构造函数参数存储在final成员中。当它的配置信息发生变化时,它就会被丢弃,取而代之的是一个新的StatefulWidget。此操作通常非常便宜,并触发重建。

相比之下,关联的StateStatefulWidget可以是长寿的.在替换State时,即使构造函数参数更改,只要树结构和键匹配,也会重新使用StatefulWidget。这允许您防止State被吹走,即使父程序更改了有关StatefulWidget的一些内容。例如,您可能希望在小部件处于动画中间时更改它的颜色或文本,State会注意到,因为它使用widget getter读取这些值。(这就是为什么State绝不能有任何构造函数参数;它必须使用widget来读取它的配置。)

如果您希望为重新配置didUpdateWidget的情况提供特殊处理,则可以将StatefulWidget中的更改通知给您,尽管通常只是简单地重新构建将给出预期的结果。

票数 5
EN

Stack Overflow用户

发布于 2018-06-01 06:36:32

也许这对你有帮助:设计讨论

将Widget (BuildContext上下文)方法放置在StatefulWidget上而不是将Widget (BuildContext上下文、状态状态)方法放在StatefulWidget上,这为开发人员在子类StatefulWidget时提供了更大的灵活性。 例如,AnimatedWidget是StatefulWidget的一个子类,它引入了一个抽象的Widget (BuildContext上下文)方法来实现它的子类。如果StatefulWidget已经有了一个使用状态参数的构建方法,那么即使它的状态对象是AnimatedWidget的内部实现细节,AnimatedWidget也会被迫将其状态对象提供给子类。 在概念上,StatelessWidget也可以以类似的方式作为StatefulWidget的子类来实现。如果构建方法是在StatefulWidget上而不是在状态上,那就不可能了。 将构建函数放在State (而不是StatefulWidget )上也有助于避免与闭包相关的一类错误,从而隐式捕获它。如果在StatefulWidget上的构建函数中定义了闭包,则该闭包将隐式捕获这个闭包,这是当前的小部件实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46107609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档