在super.initState()
之前和super.initState()
之后运行一个方法有什么区别?
@override
void initState() {
super.initState();
getCurrentUser();
}
@override
void initState() {
getCurrentUser();
super.initState();
}
发布于 2020-01-16 21:29:59
对框架的解释: Dart是基于类的面向对象编程语言,所以当您构建一个小部件时,您可以从基类StatelessWidget
或StatefulWidget
扩展它。initState
是颤振小部件中的生命周期方法(正如您可能知道的那样),它只能在StatefulWidgets中覆盖,并且只调用一次。因此,它调用基类的initState,这就是为什么调用super.initState()
的原因,它反过来创建BuildContext和附加状态。
现在是您的问题:在super.initState()
之前或之后调用方法没有发现任何不同之处。事件,我尝试在addPostFrameCallback
之前添加super.initState()
,它运行得很好。在这两种情况下,即使是super.mounted
也是正确的。
发布于 2020-01-17 00:14:56
建议Dart/文档“建议”调用super.initState()作为主体实现之前的第一个方法。
但是如果我们看看它是如何实现的,文档
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
可以看到,它只包含一个assert()。断言内置函数它只在调试模式下调用,而不是在生产模式中调用。因此,归根结底,这并不重要,因为super.initState()实际上什么也不做。
https://stackoverflow.com/questions/59781126
复制