在文档中是书面的,但我听不懂。
在将该对象插入树中时调用。
框架将为它创建的每个State对象精确地调用一次此方法。
重写此方法以执行初始化,具体取决于将此对象插入树的位置(即上下文)或用于配置此对象的小部件(即小部件)。
如果State的构建方法依赖于本身可以更改状态的对象,例如ChangeNotifier或Stream,或者某个其他可以订阅以接收通知的对象,则State应该在initState期间订阅该对象,并取消订阅从旧对象中删除,并在didUpdateWidget中更改时订阅新对象,然后在处置中取消订阅该对象。
您不能通过此方法使用BuildContext.inheritFromWidgetOfExactType。但是,将在此方法之后立即调用didChangeDependencies,并且可以在其中使用BuildContext.inheritFromWidgetOfExactType。
如果重写此方法,请确保您的方法以对super.initState()的调用开头。
但是我不确定它的含义。你能解释一下吗?
答案 0 :(得分:2)
贷记@Remi,initState()
是一种方法,当将有状态窗口小部件插入窗口小部件树时,该方法将被调用一次。
如果我们需要进行某种初始化工作(例如注册侦听器),则通常会覆盖此方法,因为与build()
不同,此方法仅被调用一次。
要注销您的侦听器(或进行一些后期工作),请覆盖dispose()
方法。
答案 1 :(得分:1)
initState()的使用
initState()
是类State
的方法,在Flutter中被视为重要的生命周期方法。 initState()
仅被调用一次,我们使用它进行一次初始化。
示例:
初始化依赖于特定BuildContext
的数据。
用于初始化需要在build()
之前执行的数据。
订阅Streams
。
答案 2 :(得分:0)
来自Flutter的官方文档,当此对象插入树中时调用。
框架将为其创建的每个State对象恰好一次调用此方法。
重写此方法以执行初始化,具体取决于将此对象插入树中的位置(即context)或用于配置此对象的小部件(即widget)
说明:
这是创建窗口小部件时调用的第一个方法(当然,在类构造函数之后)。
initState
仅被调用一次。它还必须调用super.initState()
。
此@override
方法是以下最佳时间:
初始化依赖于特定BuildContext的数据 创建的小部件实例。
初始化依赖于此小部件“ parent”的属性, 树。
订阅流,ChangeNotifiers或其他任何对象 可以更改此小部件上的数据。
@override
initState() {
super.initState();
// Add listeners to this class
cartItemStream.listen((data) {
_updateWidget(data);
});
}
答案 3 :(得分:-1)
谢谢你的回答,但我也会重申一下上面那些人的状态
@overrride
initState() { // this is called when the class is initialized or called for the first time
super.initState(); // this is the material super constructor for init state to link your instance initState to the global initState context
}