所以我发现自己在做下面的事情,却不知道我们为什么应该或不应该这样做。
假设我们有StatefulWidget
:
class ExampleWidget extends StatefulWidget {
const ExampleWidget({super.key});
@override
State<ExampleWidget> createState() => ExampleStateWidget();
}
class ExampleStateWidget extends State<ExampleWidget> with TickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
_controller = AnimationController(vsync: this, duration: Duration(microseconds: 300));
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container();
}
}
为什么我们应该在initState()
中声明_controller
,而不是像下面这样直接初始化它:
class ExampleWidget extends StatefulWidget {
const ExampleWidget({super.key});
@override
State<ExampleWidget> createState() => ExampleStateWidget();
}
class ExampleStateWidget extends State<ExampleWidget> with TickerProviderStateMixin {
AnimationController _controller = AnimationController(vsync: this, duration: Duration(microseconds: 300));
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container();
}
}
这两者之间的最大区别是什么,我使用的是initState()
,但不知道确切的原因。
1条答案
按热度按时间r7knjye21#
Flutter中提供了两种类型的小工具。
顾名思义,有状态小部件由一些“状态”组成。()是在创建有状态小部件的对象并将其插入到小部件树中时调用的方法。它基本上是有状态小部件的入口点。
initState()
方法仅被调用一次,通常用于初始化有状态小部件先前定义的变量。initState()
方法被覆盖的主要原因是,如前所述,它在其生存期内只被调用一次。如果您想再次触发它,您必须将控件切换到一个全新的屏幕和一个新的状态。