状态是(1)可以在构建小部件时同步读取的信息,以及(2)可能在小部件的生命周期内发生变化的信息。小部件实现者有责任使用 State.setState 确保在此类状态更改时及时通知状态。
有状态小部件是通过构建更具体地描述用户界面的其他小部件的星座来描述部分用户界面的小部件。构建过程递归地继续,直到用户界面的描述完全具体(例如,完全由描述具体的 RenderObjects 的 RenderObjectWidgets 组成)。
当您描述的用户界面部分可以动态更改时,有状态小部件很有用,例如由于具有内部时钟驱动状态或取决于某些系统状态。对于仅依赖于对象本身的配置信息和小部件在其中膨胀的 BuildContext 的组合,请考虑使用 StatelessWidget。
StatefulWidget 实例本身是不可变的,并将其可变状态存储在由 createState 方法创建的单独 State 对象中,或者存储在 State 订阅的对象中,例如 Stream 或 ChangeNotifier 对象,对这些对象的引用存储在 StatefulWidget 的最终字段中本身。
无状态小部件是通过构建更具体地描述用户界面的其他小部件的星座来描述部分用户界面的小部件。构建过程递归地继续,直到用户界面的描述完全具体(例如,完全由描述具体的 RenderObjects 的 RenderObjectWidgets 组成)。
当您描述的用户界面部分不依赖于对象本身中的配置信息和小部件膨胀的 BuildContext 之外的任何其他内容时,无状态小部件很有用。对于可以动态更改的组合,例如由于具有内部时钟驱动状态或取决于某些系统状态,请考虑使用 StatefulWidget。