initState和Flutter中的类构造函数有什么区别?

时间:2018-08-28 22:22:07

标签: android ios flutter

我阅读了文档,但不清楚。

状态为“ [将此对象插入树中时调用。]

将小部件插入树中时,表示它已创建,这意味着将调用类构造函数。初始化的目的是什么?构造函数的目的不是初始化类实例吗?

谢谢你们的时间。

3 个答案:

答案 0 :(得分:10)

区别在于(在创建State对象的情况下)具有initState()方法:

  
      
  • constructor只需创建一个新的State实例

  •   创建对象后并在此时调用
  • initState()   您可以分别使用BuildContextStatefulWidget属性访问State附加到的contextwidget。此时State已经安装。

  •   

引用Statehttps://docs.flutter.io/flutter/widgets/State-class.html

引用mounted Statehttps://docs.flutter.io/flutter/widgets/State/mounted.html

答案 1 :(得分:2)

在某些情况下,创建Widget时需要启动动画或更改状态,然后在构造函数中无法执行此操作,因为您的Widget尚未插入树中。

动画控制器示例

    AnimationController _animationController ;

    ...

      @override
        void initState() {
        ... instance the animationController

          _animationController.forward();
          super.initState();
        }

另一个例子,当您从另一个小部件接收到一些参数时,假设您的有状态小部件具有名为“ title”的参数,并且您想在State类中创建一个局部变量来处理状态,则您将不得不做一些事情像这样:

  class ExampleWidget extends StatefulWidget {

   final String title;

   ExampleWidget({this.title});

  ....


  YourStateClass extends State<ExampleWidget> {

  var localVariable;

  @override
        void initState() {
          localVariable = widget.title;
          super.initState();
        }

现在您可以在小部件树中使用localVariable来更新状态。

这有意义吗?

答案 2 :(得分:0)

  

构造函数用于创建实例(对象)。

     

初始状态用于初始化已经存在的对象的内容。

例如,

假设您打开一个具有多个路线/页面的应用程序。当您打开任何特定页面时,将创建您内容在屏幕上看到的对象 A (带有一些初始数据)。

现在假设您在该特定页面上按一个按钮(执行更改数据的特定任务)。然后将调用 initstate 初始化对象 A 的数据,而无需重新从头开始打开应用。

,必须注意,在构建之前调用了initstate,并且此时没有可用的上下文

就这些。