在super.initState()之前和super.initState()之后运行方法之间的区别

时间:2020-01-17 04:18:09

标签: flutter

super.initState()之前和super.initState()之后运行方法之间有什么区别

     @override
  void initState() {
    super.initState();  
    getCurrentUser();   
  }



 @override
  void initState() {
 getCurrentUser(); 
    super.initState();  

  }

2 个答案:

答案 0 :(得分:2)

框架说明:Dart是基于类的面向对象的编程语言,因此,在构建窗口小部件时,可以从基类StatelessWidgetStatefulWidget对其进行扩展。 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()实际上什么也不做。