【问题标题】:Do all widgets in Flutter have the "bool this.mounted" property?Flutter 中的所有小部件都具有“bool this.mounted”属性吗?
【发布时间】:2021-08-08 14:13:37
【问题描述】:

愿你平安

我正在研究 Flutter 的小部件生命周期并停在 this.mounted 布尔变量,它确实直接存在于 State 类中,它只能与 StatefulWidget 作为子类连接,永远不会/用StatelessWidget 做了。

问题是……

是否所有小部件实际上都包含bool this.mounted 变量,正如某些人在[this accepted answerthis articlethis] 中所说的那样?

我在 Flutter 中搜索,发现这个 mounted 变量仅在 State 类中,然后我进一步查找在 Element 类中找到了一个名为 mount() 的函数。

StatelessWidget 类连接到 StatelessElement 类,该类从直接继承自 Element 类的 ComponentElement 扩展而来。

我现在真的很困惑,也许我误解了这个,我需要解释一下!谢谢。

【问题讨论】:

    标签: flutter lifecycle application-lifecycle statefulwidget statelesswidget


    【解决方案1】:

    不知道为什么答案是all widgets。但是NO

    只有 State<T> 对象是具有名为 mountedgetter 的对象。

    这很容易验证,只需 cmd + clickctrl + click 在您班级中的任何 State 上,这会将您重定向到位于 flutter -> package -> flutter -> lib -> src -> widgets 路径的名为 framework.dart 的文件。

    搜索mounted,这一行是您能找到的唯一实际声明。

    bool get mounted => _element != null;
    

    这是State 类代码的一部分。

    【讨论】:

    • 是的,我同意你的朋友,但我在想也许.. 只是也许,StatelessWidget 有一个“已安装”布尔值,但它是私有的,因为我们不需要 getter,因为小部件是不可变?!,只是想知道。
    • 即使它是私有的,它仍然会出现在代码中,对吧?我在代码中搜索了mounted 的提及,并且只有State 小部件具有该变量。你可以在我提到的路径打开框架代码,自己检查。
    • 私有或公共,变量至少应该在代码中。如果有相同的想法但名称不同的东西,那么我们就不会知道。但可以肯定的是,在任何其他类中都没有其他 mounted
    • 好吧,我会接受你的回答,因为我们不能否认除了State 类中的属性之外没有mounted 属性。
    • 很酷,谢谢。我将对mounted 所基于的实际_element 变量进行更多研究,如果遇到任何问题,我会更新您。
    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 2023-03-18
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2020-10-20
    • 1970-01-01
    相关资源
    最近更新 更多