面试题答案
一键面试initState
- 作用:用于初始化状态,比如初始化一些变量、订阅一些数据等。在这个阶段,State对象被插入到树中,并且只会被调用一次。
- 调用时机:当State对象第一次插入到Widget树中时调用。
didChangeDependencies
- 作用:当State对象的依赖发生变化时调用。比如依赖的InheritedWidget发生变化,在这里可以执行一些依赖变化后的操作,如重新获取依赖数据。
- 调用时机:在initState之后调用,并且每当State对象依赖的InheritedWidget发生变化时也会调用。
build
- 作用:构建Widget,返回一个Widget树。每次调用setState或依赖的InheritedWidget变化导致重新构建时,都会调用此方法。
- 调用时机:在initState、didChangeDependencies之后首次调用,后续每当需要更新UI(如调用setState)时都会调用。
setState
- 作用:通知框架状态发生了变化,框架会重新调用build方法以更新UI。
- 调用时机:当需要更新State中的数据并反映到UI上时调用。
deactivate
- 作用:当State对象从树中移除时调用,常用于取消一些订阅或动画。但此State对象可能会重新插入到树中。
- 调用时机:当State对象从树中移除时调用,例如在Navigator.pop操作导致页面切换时。
dispose
- 作用:用于释放资源,比如取消动画、取消订阅等。一旦调用此方法,State对象将永远不会再插入到树中。
- 调用时机:在deactivate之后,当State对象被永久从树中移除时调用,例如页面被销毁。