什么时候需要Stateful Widget?
当需要跟用户进行交互时,我们希望,页面上的部分widgets根据用户的操作和指令,做出相应的响应时
Stateful Widget的组成
Stateful Widget由两部分组成:
- 继承自StatefulWidget的类(the class that extends StatefulWidget)
- 继承自State的类(the class that extends State)
the class that extends StatefulWidget
- 这个类会在其createState方法中创建一个State对象
- 这个类的实例的生存期比其State对象的实例的生成期短
- 这个类中的数据不可改变
- 这个类通过构造函数传递信息,与Stateless Widget一样
- 当数据需要更改时,这个类就会被新创建出来的类取代
the class that extends State
- 该类中的数据可以改变
- 它使用build方法来构造UI组件
- 它可以对用户事件进行响应
Stateful widget的 Build 方法
- Stateful Widget 通过其继承了State的类中的build方法,来构造UI组件
- 这种组件可以改变状态,并且实现重绘/渲染
- 当调用Stateful Widget的setState方法时,其build方法会被重新调用
生命周期有关的方法(LifeCycle Methods)
-
the class that extends StatefulWidget
- createState()
-
the class that extends State
- build()
当Widget需要重绘时,Flutter就会调用该方法 - initState()
当每次Widget被创建的时候,Flutter也会调用这个方法 - didChangeDependencies()
当Flutter检测到数据信息改变导致UI改变调用build方法时,就会调用这个方法;注意,当setState()被调用时,该方法不会被调用 - didUpdateWidget()
当Flutter必须丢弃继承自StatefulWidget的类并将其用一个新的类替代时,就会调用这个方法,来将现有的State类与新的StatefulWidget类联系起来 - setState()
当需要更新UI或者调用build方法时,可以调用这个方法 - deactivate()
当State类从Tree上移除时,就会调用这个方法。主要用于State对象可以从一个Tree移到另一个Tree的时候 - dispose()
当继承了State类的对象被销毁时,Flutter就会调用这个方法
- build()