一尘不染

flutter中的initState和super.initState是什么?

flutter

在文档中是书面的,但我听不懂。

当此对象插入树中时调用。

框架将为它创建的每个State对象精确地调用一次此方法。

重写此方法以执行初始化,具体取决于将此对象插入树中的位置(即上下文)或用于配置此对象的小部件(即小部件)。

如果State的构建方法依赖于本身可以更改状态的对象(例如ChangeNotifier或Stream),或者某个其他可以订阅以接收通知的对象,则State应该在initState期间订阅该对象,并从旧的状态中取消订阅对象,并在didUpdateWidget中更改时订阅新对象,然后在处置中取消订阅该对象。

您不能通过此方法使用BuildContext.inheritFromWidgetOfExactType。但是,didChangeDependencies将在此方法之后立即调用,并且可以在此处使用BuildContext.inheritFromWidgetOfExactType。

如果重写此方法,请确保您的方法始于对super.initState()的调用。

但是我不确定它的含义。你能解释一下吗?


阅读 2462

收藏
2020-08-13

共1个答案

一尘不染

归功于@Remi,initState()是有状态窗口小部件插入到窗口小部件树中时被调用一次的方法。

如果需要进行某种初始化工作(例如注册侦听器),则通常会覆盖此方法,因为与build()调用此方法不同。

并且要注销您的侦听器(或进行一些后期工作),请重写dispose()method。


这里

State的子类可以重写initState来完成只需要发生一次的工作。例如,重写initState可配置动画或订阅平台服务。需要通过调用super.initState来启动initState的实现。

当不再需要状态对象时,框架会在状态对象上调用dispose()。覆盖处理功能以执行清理工作。例如,覆盖处置可取消计时器或取消订阅平台服务。Dispose的实现通常以调用super.dispose结尾

2020-08-13