flutter 为什么我们应该在InitState中初始化变量而不是直接用声明初始化它们

ehxuflar  于 2022-11-17  发布在  Flutter
关注(0)|答案(1)|浏览(151)

所以我发现自己在做下面的事情,却不知道我们为什么应该或不应该这样做。
假设我们有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(),但不知道确切的原因。

r7knjye2

r7knjye21#

Flutter中提供了两种类型的小工具。

  • 有状态小部件
  • 无状态小部件

顾名思义,有状态小部件由一些“状态”组成。()是在创建有状态小部件的对象并将其插入到小部件树中时调用的方法。它基本上是有状态小部件的入口点。initState()方法仅被调用一次,通常用于初始化有状态小部件先前定义的变量。initState()方法被覆盖的主要原因是,如前所述,它在其生存期内只被调用一次。如果您想再次触发它,您必须将控件切换到一个全新的屏幕和一个新的状态。

相关问题