在super.initState()
之前和super.initState()
之后运行方法之间有什么区别
@override
void initState() {
super.initState();
getCurrentUser();
}
@override
void initState() {
getCurrentUser();
super.initState();
}
答案 0 :(得分:2)
框架说明:Dart是基于类的面向对象的编程语言,因此,在构建窗口小部件时,可以从基类StatelessWidget
或StatefulWidget
对其进行扩展。 initState
是flutter小部件中的生命周期方法(您可能知道),只能在StatefulWidgets中重写,并且仅调用一次。因此,它调用基类的initState,即StatefulWidget,这就是为什么您调用super.initState()
从而又创建BuildContext和附加状态的原因。
现在是您的问题:在super.initState()
之前或之后调用方法并没有发现什么不同。事件我尝试在addPostFrameCallback
之前添加super.initState()
,但效果很好。
在两种情况下,甚至super.mounted
都是正确的。
答案 1 :(得分:1)
建议 Dart / Flutter文档“建议”在身体实现之前将super.initState()作为第一个方法调用。
但是,如果我们看看它是如何实现的,Documentation
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
可能会看到它仅包含一个 assert()。 assert内置函数只能在DEBUG模式下调用,而不能在生产模式下调用。因此,归根结底,这并不重要,因为super.initState()实际上什么也不做。