StatelessWidgets与StatefulWidget

jxm*_*s12 1 flutter

StatelessWidgets的所有代码,甚至是build方法,都在一个类中。对于StatefulWidgets,为什么将Statea类与Widget?分开?难道它们不能合并在一起,而StatefulWidget只能调用setState自身吗?

Col*_*son 5

StatefulWidget班是不可变的和存储其构造函数参数的final成员。当其配置信息更改并被新的替换时,它将被丢弃StatefulWidget。此操作通常非常便宜,并且会触发重建。

相反,与Statea 的关联StatefulWidget可以长期存在。该State是重新使用时StatefulWidget被替换,即使构造函数的参数改变,只要树结构和密钥匹配。这样State即使父母改变了自己的想法,也可以避免被吹走StatefulWidget。例如,您可能希望在小部件处于动画中间时更改其颜色或文本,并且State会注意到这一点,因为它使用widget吸气剂读取这些值。(这就是为什么a State绝对不能包含任何构造函数参数的原因;必须使用它widget读取其配置。)

didUpdateWidget如果您想对StatefulWidget重新配置的情况进行特殊处理,则可以收到有关更改的通知,尽管通常只是简单地进行重建即可得到预期的结果。