颤振中的initState和super.initState是什么?

时间:2018-09-12 13:04:43

标签: flutter

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

  

在将该对象插入树中时调用。

     

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

     

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

     

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

     

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

     

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

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

4 个答案:

答案 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方法是以下最佳时间:

  1. 初始化依赖于特定BuildContext的数据 创建的小部件实例。

  2. 初始化依赖于此小部件“ parent”的属性, 树。

  3. 订阅流,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
}