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