Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在颤振中initState和类构造函数之间有什么区别?_Android_Ios_Flutter - Fatal编程技术网

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

Android 在颤振中initState和类构造函数之间有什么区别?,android,ios,flutter,Android,Ios,Flutter,我读了文档,但不清楚 它声明“[initState]在将此对象插入树时被调用。” 当一个小部件被插入到树中时,它意味着它已经被创建,这意味着类构造函数被调用。init的目的是什么?构造函数的目的不是初始化类实例吗 感谢大家抽出时间。在某些情况下,您需要在创建小部件时启动动画或更改状态,然后在构造函数中无法执行此操作,因为您的小部件尚未插入到树中 AnimationController AnimationController _animationController ; ...

我读了文档,但不清楚

它声明“[initState]在将此对象插入树时被调用。”

当一个小部件被插入到树中时,它意味着它已经被创建,这意味着类构造函数被调用。init的目的是什么?构造函数的目的不是初始化类实例吗


感谢大家抽出时间。

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

AnimationController

    AnimationController _animationController ;

    ...

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

          _animationController.forward();
          super.initState();
        }
另一个示例,当您从另一个
小部件
接收到一些参数时,假设您的
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();
        }
class ExampleWidget扩展了StatefulWidget{
最后的字符串标题;
ExampleWidget({this.title});
....
YourStateClass扩展了状态{
var局部变量;
@凌驾
void initState(){
localVariable=widget.title;
super.initState();
}
现在,您可以在小部件树中使用
localVariable
来更新状态。

区别在于(在创建
state
对象的上下文中),它具有
initState()
方法:

  • 构造函数
    只需创建一个新的
    状态
    实例

  • initState()
    您可以分别使用
    上下文
    小部件
    属性访问
    构建上下文
    状态
    附加到的
    状态小部件
    。此时
    状态
    已经装载

参考
状态

参考
安装状态

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

initstate用于初始化已存在对象的内容

比如说,

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

现在,假设您按下该特定页面上的按钮(该按钮执行更改数据的特定任务)。然后将调用initstate来初始化objecta的数据,而无需您从fresh再次打开应用程序

同样,必须注意的是,initstate在构建之前被调用,此时没有上下文可用


仅此而已。

请链接到您正在阅读的文档,好吗?我猜是:@T.Woody yea。我已经阅读了5次以上。我仍然不明白“取决于插入对象的位置”或“用于配置此小部件”是什么意思.这不是类构造函数的全部功能吗?我正在查看直接代码,看看是否可以找到它。您自己是否直接查看了代码?关于在有用时不查看的位置的反馈:)我相信
initState
是从中派生出来的(其行为类似于)在比较了文档的阅读方式后:twitter API中的这一点在颤振环境中也有意义吗?@diegoveloper哇,你的第一个解释很清楚。我现在已经掌握了。但是,对于第二个例子……你不能传递“标题”吗通过YourStateClass构造函数的构造函数调用变量?例如:YourStateClass(title);可以,但不能在构造函数的最后一个问题中调用setState。如果可以通过YourStateClass构造函数访问“title”属性,那么通过initState()进行访问有什么好处相反?@WalterM ok在本例中是相反的,假设您在构造函数中初始化了localVar,然后将localVar放入小部件中。您将看到该值,因为它是在小部件进入树之前设置的。但是如果您在initState中初始化localVar,并在小部件中使用localVar,您将看不到更改直到调用setState,因为在初始化值之前已经创建了小部件。