StatelessWidgets的所有代码都在一个类中,甚至是build方法。对于StatefulWidgets,为什么Statea separate class from theWidget?它们不能组合起来,StatefulWidget就可以自己调用setState

最佳答案

StatefulWidget类是不可变的,并将其构造函数参数存储在final成员中。当它的配置信息发生变化时,它会被丢弃,并被一个新的StatefulWidget替换。此操作通常非常便宜,并触发重建。
相比之下,aState的相关StatefulWidget可以长期存在。只要树结构和键匹配,当替换State时,即使构造函数参数发生更改,也会重新使用StatefulWidget。这允许您避免自己的State被吹走,即使家长改变了一些关于StatefulWidget的事情。例如,您可能希望在小部件处于动画中间时更改其颜色或文本,State会注意到,因为它使用widgetgetter读取这些值。(这就是为什么State不能有任何构造函数参数;它必须使用widget来读取其配置。)
如果您希望为重新配置了didUpdateWidget的情况提供特殊处理,则可以通知您在StatefulWidget中所做的更改,尽管通常只需重新构建即可获得预期的结果。

09-10 13:48