【问题标题】:initState() not called when building stateful widget构建有状态小部件时未调用 initState()
【发布时间】:2019-12-08 19:55:23
【问题描述】:

我正在尝试构建一个小部件并在 initState() 函数中执行某些操作。我以前在其他情况下也这样做过,但这次 initState() 只是没有被调用。我已经放了断点,应用程序进入构造函数(断言行)并且断言中的对象不为空,所以它应该继续并初始化状态。但它没有,我不明白为什么。

任何帮助将不胜感激。谢谢。

代码如下:

class MyWidget extends StatefulWidget {

    SomeOtherObject someOtherObject;

    MyWidget({@required this.someOtherObject})
        :
            assert(someOtherObject != null)
    ;

    @override
    _MyWidgetState createState() => _MyWidgetState();
}


class _MyWidgetState extends State<MyWidget> {

    @override
    void initState() {
        super.initState();
        // widget.someOtherObject.addListener(update);
    }

    @override
    Widget build(BuildContext context) {
        // ...
    }
}

【问题讨论】:

  • 那么如果你在 initState 中放一个 print() 语句,它不会打印任何东西?
  • 什么都没有。我已经试过了 :) 不会在该行的断点处停止,不会打印任何内容。
  • 你在哪里使用这个小部件?
  • 所以你知道,initState 在热重载时不会被调用,只会在热重启时被调用。
  • @BenjaminS。是的,我知道。正如我所说,它不会在断点处停止,控制台也没有打印任何内容。

标签: flutter dart


【解决方案1】:

我会将您重定向到这个答案:initState function is't be called in StatefulWidget by default

您的代码在 DartPad 中运行良好,请确保您完全重启您的应用,而不仅仅是热重载。很多时候,Flutter 喜欢使用我的应用程序的旧版本,所以我必须热重启。另外,请注意,无论何时您编辑 initState(),您都必须热重启您的应用以使更改生效。

【讨论】:

  • 我知道不会每次都调用 initState。我什至确实清除了缓存、存储、卸载并重新启动它(在模拟器中)。仍然没有调用该函数。 :(
猜你喜欢
  • 2021-09-29
  • 2021-06-24
  • 2021-04-14
  • 2021-06-10
  • 2020-10-19
  • 2021-01-17
  • 2021-12-24
  • 2020-03-18
  • 2019-07-12
相关资源
最近更新 更多