在Flutter中initState和类构造函数之间有什么区别?

Wal*_*r M 11 android ios flutter

我阅读了文档,但目前尚不清楚.

它声明"当将此对象插入树中时,[initState is]被调用."

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

谢谢你们的时间.

die*_*per 14

在某些情况下,你将需要启动动画或当您创建改变状态Widget,那么是不是可以做,在你的构造,因为你Widget是不是在树中插入呢。

示例 AnimationController

    AnimationController _animationController ;

    ...

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

          _animationController.forward();
          super.initState();
        }
Run Code Online (Sandbox Code Playgroud)

另一个例子,当你从另一个接收一些参数时Widget,假设你StatefulWidget有一个命名的参数,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();
        }
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*Pag 13

不同之处在于(在创建State对象的上下文中)具有以下initState()方法:

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

  • initState()在创建对象之后被调用并且在这一点上可以访问的BuildContextStatefulWidget其中,以State附接至,分别使用contextwidget性能.此时State已安装.

参考State:https://docs.flutter.io/flutter/widgets/State-class.html

参考mounted State:https://docs.flutter.io/flutter/widgets/State/mounted.html