Flutter 无状态窗口小部件与状态窗口小部件
无状态小部件的所有代码都在一个类中,甚至是构建方法。对于StatefulWidgets,为什么State是一个独立于Widget的类?难道不能将它们组合起来,StatefulWidget就可以自己调用setState吗?StatefulWidget类是不可变的,并将其构造函数参数存储在最终成员中。当它的配置信息改变时,它就会被丢弃,并被一个新的StatefulWidget替换。此操作通常非常便宜,并且会触发重建 相比之下,StatefulWidget的关联状态可能是长期存在的。在替换StatefulWidget时,即使构造函数参数发生更改,只要树结构和键匹配,也会重新使用状态。这允许您保持您的状态不被吹走,即使父级更改了有关StatefulWidget的某些内容。例如,您可能希望在动画的中间更改小部件的颜色或文本,并且该状态会注意到,因为它使用小部件获取器读取这些值。这就是为什么一个状态不能有任何构造函数参数;它必须使用小部件读取其配置 如果您希望为重新配置StatefulWidget的情况提供特殊处理,则可以通知您在中所做的更改,尽管通常只需重新构建即可得到预期的结果 StatefulWidget类是不可变的,并将其构造函数参数存储在最终成员中。当它的配置信息改变时,它就会被丢弃,并被一个新的StatefulWidget替换。此操作通常非常便宜,并且会触发重建 相比之下,StatefulWidget的关联状态可能是长期存在的。在替换StatefulWidget时,即使构造函数参数发生更改,只要树结构和键匹配,也会重新使用状态。这允许您保持您的状态不被吹走,即使父级更改了有关StatefulWidget的某些内容。例如,您可能希望在动画的中间更改小部件的颜色或文本,并且该状态会注意到,因为它使用小部件获取器读取这些值。这就是为什么一个状态不能有任何构造函数参数;它必须使用小部件读取其配置 如果您希望为重新配置StatefulWidget的情况提供特殊处理,则可以通知您在中所做的更改,尽管通常只需重新构建即可得到预期的结果 也许这对你有帮助: 在StatefulWidget上放置Widget buildcontext上下文方法,而不是在StatefulWidget上放置Widget buildcontext上下文,State State方法在子类化StatefulWidget时为开发人员提供了更大的灵活性 例如,AnimatedWidget是StatefulWidget的一个子类,它为要实现的子类引入了一个抽象的Widget BuildContext上下文方法。如果StatefulWidget已经有了一个采用状态参数的构建方法,则AnimatedWidget将被迫向子类提供其状态对象,即使其状态对象是AnimatedWidget的内部实现细节 从概念上讲,无状态widget也可以以类似的方式实现为StatefulWidget的子类。如果构建方法是在StatefulWidget而不是State上,那就不可能了 将构建函数置于State而不是StatefulWidget上也有助于避免与隐式捕获此函数的闭包相关的一类错误。如果您在StatefulWidget的构建函数中定义了闭包,那么该闭包将隐式地捕获它,即当前小部件实例 也许这对你有帮助: 在StatefulWidget上放置Widget buildcontext上下文方法,而不是在StatefulWidget上放置Widget buildcontext上下文,State State方法在子类化StatefulWidget时为开发人员提供了更大的灵活性 例如,AnimatedWidget是StatefulWidget的一个子类,它为要实现的子类引入了一个抽象的Widget BuildContext上下文方法。如果StatefulWidget已经有了一个采用状态参数的构建方法,则AnimatedWidget将被迫向子类提供其状态对象,即使其状态对象是AnimatedWidget的内部实现细节 从概念上讲,无状态widget也可以以类似的方式实现为StatefulWidget的子类。如果构建方法是在StatefulWidget而不是State上,那就不可能了 将构建函数置于State而不是StatefulWidget上也有助于避免与隐式捕获此函数的闭包相关的一类错误。如果您在StatefulWidget的构建函数中定义了闭包,那么该闭包将隐式地捕获它,即当前小部件实例 见Flutter 无状态窗口小部件与状态窗口小部件,flutter,Flutter,无状态小部件的所有代码都在一个类中,甚至是构建方法。对于StatefulWidgets,为什么State是一个独立于Widget的类?难道不能将它们组合起来,StatefulWidget就可以自己调用setState吗?StatefulWidget类是不可变的,并将其构造函数参数存储在最终成员中。当它的配置信息改变时,它就会被丢弃,并被一个新的StatefulWidget替换。此操作通常非常便宜,并且会触发重建 相比之下,StatefulWidget的关联状态可能是长期存在的。在替换Statef