### 1.1.4 处理用户交互 如果Widget需要根据用户交互或其他因素进行更改,则该Widget是有状态的。例如,如果一个Widget的计数器在用户点击一个按钮时递增,那么该计数器的值就是该Widget的状态。当该值发生变化时,需要重新构建Widget以更新UI。 这些Widget将继承StatefulWidget(而不是State)并将它们的可变状态存储在State的子类中,如图1-2所示。 ![](https://box.kancloud.cn/98e4ae0cd55756d5c6aaae266408b8d3_595x350.jpeg) 图1-2 有状态Widget继承示意图 每当你改变一个State对象时(例如增加计数器),必须调用setState()来通知框架,框架会再次调用State的构建方法来更新用户界面。 有了独立的状态和Widget对象,其他Widget可以以同样的方式处理无状态和有状态的Widget,而不必担心丢失状态。父Widget可以自由地创造子Widget的新实例且不会失去子Widget的状态,而不是通过持有子Widget来维持其状态。框架在适当的时候完成查找和重用现有状态对象的所有工作。