美文网首页
【Flutter API】AbstractNode 翻译及个人理

【Flutter API】AbstractNode 翻译及个人理

作者: popesa | 来源:发表于2021-12-02 20:25 被阅读0次

    子类有: LayerRenderObjectSemanticsNode
    AbstractNode 是 tree 中一个抽象节点。

    AbstractNode有深度、连接、父级的概念,但是并不会指向子节点。

    当子类修改child的parent,应该在适当时调用parent.adoptChild(child)或者parent.dropChild(child)。如果有需要,可以在子类中暴露用于操作tree的API。
    当前节点的父节点通过属性parent来暴露。

    当前的附着状态有attached属性来暴露。任何被认为是附着的树的根都应该通过调用attach来手动附加。除此之外,方法attach和detach不应该直接被调用;附着状态会自动的由adoptChild和dropChild方法来管理。

    具有Children的子类必须重写这些方法的文档中所描述的attach和detach方法。

    节点的depth(深度)总是比他们祖先大。不能保证兄弟姐妹之间的深度。节点的深度是为了保证节点按照深度顺序进行处理。子节点的深度可以比父节点的深度大一个以上;深度值从来不会降低:最重要的就是子节点的深度值比父节点的深度值大。

    关于深度,考虑这样的一棵树,根节点为A,B为A的子节点,C为B的子节点,初始时A的深度值为0,B为1,C为2。如果把C变更成A的子节点,B的兄弟节点,则C的深度值不变,仍然为2。深度值会有adoptChild和dropChild方法来自动维护。

    构造函数 AbstractNode()

    属性

    属性名 说明
    attachedbool 此节点所在树的根节点是否连接到了某个东西上。
    在调用attach后,为true;调用detach后为false。
    depthint 节点在树中的深度。
    从根往下,单调递增。
    ownerObject? 节点的所有者,如果没有附着则为null。
    当前节点所属的子树都有同样的所有者。
    parentAbstractNode? 当前节点在数中的父节点



    方法

    方法签名 返回值类型 说明
    adoptChild (covariant AbstractNode child) void 标记参数节点为当前节点的子节点。
    当子类添加子节点时应该调用这个方法。
    attach(covariant Object owner) void 将当前节点的owner标记为参数值。
    通常只会在两种情况下调用,一是在父节点的attach方法中调用,二是由owner来调用,用以标注树的根节点为附着。
    detach() void 子节点从父节点上脱离
    dropChild (covariant AbstractNode child) void 移除子节点
    redepthChild void
    redepthChildren(AbstractNode child) void 空方法



    ======= 以上是对官方文档的翻译 ========


    ======= 不愧为官方文档,看完后,好多概念都不理解 ======
    ======= 阅读源码后才清晰一些,下面是我对部分疑惑的解释 ===========

    属性attached,其实是个get方法,就是对属性owner做了判断,如果owner非空,则为true,如果owner为空,则为false。

    对于方法,主要还是方法列表中的前四个方法,adoptChild、attach、detach和dropChild。他们可以分成两组,adoptChild和attach为添加节点时调用的,区别是adoptChild是在父节点上调用,attach是在子节点上调用;另外的两个方法detach和dropChild,就是在移除节点时,分别在子节点和节点上调用的。

    === 码字不易,求赞求打赏 === 你的支持是我坚持分享的动力 ===

    相关文章

      网友评论

          本文标题:【Flutter API】AbstractNode 翻译及个人理

          本文链接:https://www.haomeiwen.com/subject/meduxrtx.html