【问题标题】:Flutter : InitState understandingFlutter : InitState 理解
【发布时间】:2022-10-25 15:18:54
【问题描述】:

我试图理解为什么我们必须使用 initState,我在互联网上阅读了很多关于它的内容,但仍然无法真正理解它在代码中的影响。

我在一个教程中看到,在一个表单中我们可以添加一个新产品(标题、价格、图像......),在表单的开头添加这个,为什么这很重要?如果它不在这里会发生什么?

  void initState() {
    _imageUrlFocusNode.addListener(_updateImageUrl);
    super.initState();
  }

谢谢

【问题讨论】:

    标签: flutter


    【解决方案1】:

    StatefulWidget 被实例化时,它的状态不能立即被使用和修改。 initState @override 用于运行需要在状态可用时立即访问的代码。

    在您使用的示例中,它似乎正在添加一个侦听器以通知表单小部件的 focusNode 的更改。这将更改您当前StatefulWidget 的状态。因此,为什么需要在此 initState 覆盖上添加它。

    【讨论】:

      【解决方案2】:

      当此对象插入树中时调用。框架将为它创建的每个 State 对象仅调用一次此方法。

      因此,这意味着当您创建的小部件在屏幕调用中出现一次时。但是 build 方法需要多种不同的情况。

      框架在许多不同的情况下调用此方法。 例如:

      调用 initState 后。调用 didUpdateWidget 之后。后 接收对 setState 的调用。在这个 State 对象的依赖之后 更改(例如,先前构建引用的 InheritedWidget 变化)。调用 deactivate 然后重新插入 State 将对象放入另一个位置的树中。

      如果您想要进一步的描述,您可以访问flutter documentation

      你的情况也是如此; _imageUrlFocusNode.addListener(_updateImageUrl); 如果您在 build 方法中添加此代码。您可能会有很多听众,因此内存使用量会增加。

      【讨论】:

        猜你喜欢
        • 2019-08-30
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 1970-01-01
        • 2019-12-24
        • 2020-09-27
        • 2021-10-28
        相关资源
        最近更新 更多