コンテンツにスキップ

Element クラス

Widgetツリー上の位置と可変状態を保持し、Widgetの更新をRenderObjectツリーへ反映する要素の基底クラスです。

名前空間: FloatSoda.Elements
アセンブリ: FloatSoda.dll

public abstract class Element : IBuildContext, IComparable<Element>

object ← Element

ComponentElement, RenderObjectElement

IBuildContext, IComparable<Element>

object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

ServiceScopeExtension.GetRequiredService<T>(IBuildContext), ServiceScopeExtension.GetService<T>(IBuildContext)

このElementが依存関係を登録したInheritedElementの集合を取得します。

protected HashSet<InheritedElement> Dependencies { get; }

HashSet<InheritedElement>

Elementツリー上の深さを取得または設定します。 ルートを1とし、子へ進むごとに1ずつ増加します。

public int Depth { get; set; }

int

このElementが再構築を必要としているかどうかを取得または設定します。

public bool Dirty { get; set; }

bool

再構築を予約する場合は、この値を直接設定せずMarkNeedsBuildを使用します。

このElementがBuildOwnerの再構築待ちリストに登録されているかどうかを取得または設定します。

public bool InDirtyList { get; set; }

bool

この値を直接変更しても、再構築は予約されません。

このElementから参照できるInheritedWidgetの登録型と、最近傍の対応Elementとのマップを取得または設定します。 継承情報がまだ構成されていない場合はnullです。

public Dictionary<Type, InheritedElement>? InheritedWidgets { get; set; }

Dictionary<Type, InheritedElement>?

このElementツリーの再構築を管理する所有者を取得または設定します。 ツリーへ接続されていない場合はnullです。

public BuildOwner? Owner { get; set; }

BuildOwner?

Elementツリー上の親を取得または設定します。 ルートまたはツリーから切り離されたElementではnullです。

public Element? Parent { get; set; }

Element?

このElement以下で最初に見つかるRenderObjectを取得します。 対応するRenderObjectが存在しない場合はnullです。

public virtual RenderObject? RenderObject { get; protected set; }

RenderObject?

RenderObjectElement

親がこのElementへ割り当てた、親の子リストの中での位置を取得します。

public object? Slot { get; }

object?

値の意味は親が決めます。複数の子を持つMultiChildRenderObjectElement%601は IndexedSlotを、子が1つの親はnullを割り当てます。 RenderObjectを持たないElement(ComponentElementなど)は、自身のslotをそのまま子へ引き継ぎます。

RenderObjectElementは、自身のRenderObjectを祖先のRenderObjectへ挿入する位置としてこの値を使います。

このElementが現在管理しているWidgetを取得または設定します。 ElementへWidgetが割り当てられる前はnullです。

public Widget? Widget { get; set; }

Widget?

このElement以下のRenderObjectを、祖先側のRenderObjectツリーへ接続します。

public virtual void AttachRenderObject()

Elementの再構築順序を、ツリーの深さと再構築要否に基づいて比較します。

public int CompareTo(Element? other)

other Element?

比較対象のElement。nullは指定できません。

int

このElementが先なら負の値、同順位なら0、後なら正の値。

このElement以下のサブツリーをツリーから切り離す際に、依存していた InheritedElement の被依存リストから自身を除去する。 これを行わないと、破棄済みElementへDidChangeDependenciesが 呼ばれ続け、リークの原因になる。

protected virtual void Deactivate()

指定した子ElementをElementツリーとRenderObjectツリーから切り離し、依存関係を解除します。

protected void DeactivateChild(Element child)

child Element

切り離す直接の子Element。

指定した型として登録された最も近い祖先のInheritedWidgetを取得し、 このコンテキストとの依存関係を登録します。

public T? DependOnInheritedWidgetOfExactType<T>() where T : InheritedWidget

T?

該当する祖先のInheritedWidget。該当する祖先が存在しない場合はnull。

T

検索するInheritedWidgetの型。

取得したInheritedWidgetが更新を通知すると、このコンテキストに対応するElementは再構築を要求されます。

InheritedElement

このElement以下のRenderObjectをRenderObjectツリーから切り離します。

public virtual void DetachRenderObject()

このElementが依存するInheritedWidgetの値が変更されたことを通知します。

public virtual void DidChangeDependencies()

基底実装はこのElementの再構築を要求します。

GetElementForInheritedWidgetOfExactType<T>()

Section titled “GetElementForInheritedWidgetOfExactType<T>()”

指定した型として登録された最も近い祖先のInheritedWidgetに対応するElementを取得します。

public virtual InheritedElement? GetElementForInheritedWidgetOfExactType<T>() where T : InheritedWidget

InheritedElement?

該当する祖先のInheritedElement。 該当する祖先が存在しない場合はnull。

T

検索するInheritedWidgetの型。

このメソッドは取得したElementへの依存関係を登録しません。

InheritedWidget

指定したWidgetに対応するElementを生成し、このElementの子としてマウントします。

protected Element InflateWidget(Widget newWidget, object? newSlot = null)

newWidget Widget

Elementを生成するWidget。

newSlot object?

子へ割り当てるslot。

Element

生成してマウントされた子Element。

このElementを次のビルド処理で再構築するよう要求します。

public void MarkNeedsBuild()

Elementを再構築が必要な状態にし、所有者の再構築待ちリストへ登録します。 すでに再構築が必要な場合は、状態と予約を変更しません。

このElementを指定した親の子としてElementツリーへ接続します。

public virtual void Mount(Element? parent)

parent Element?

接続先の親Element。ルートとして接続する場合はnull。

親から所有者と継承情報を引き継ぎ、深さを設定します。 このメソッドだけではWidgetの再構築やRenderObjectの接続は行いません。

派生Elementが担当する再構築処理を実行します。

public abstract void PerformRebuild()

ホットリロード時に呼ばれ、このElement以下のサブツリー全体を再ビルド対象にする。 同じWidgetインスタンスによる差分スキップに関わらず、全ComponentElementのBuild()が再実行される。

public void Reassemble()

このElement固有の再構築処理を直ちに実行します。

public void Rebuild()

通常のフレーム更新ではBuildScopeから呼び出されます。

このElementが管理するWidgetを、更新後の構成へ置き換えます。

public virtual void Update(Widget newWidget)

newWidget Widget

このElementと同じ位置を引き継ぐ新しいWidget。

基底実装はWidgetの置き換えだけを行い、再構築を予約しません。

既存の子Elementを新しいWidget構成へ更新し、再利用できない場合は子Elementを置き換えます。 子のslotには、RenderObjectを持たないElementなら自身のSlotを、 RenderObjectElementならnullを割り当てます。

protected Element? UpdateChild(Element? child, Widget? newWidget)

child Element?

現在の子Element。子が存在しない場合はnull。

newWidget Widget?

子として適用するWidget。子を取り除く場合はnull。

Element?

更新または生成された子Element。子を取り除いた場合はnull。

既存の子Elementを新しいWidget構成とslotへ更新し、再利用できない場合は子Elementを置き換えます。

protected Element? UpdateChild(Element? child, Widget? newWidget, object? newSlot)

child Element?

現在の子Element。子が存在しない場合はnull。

newWidget Widget?

子として適用するWidget。子を取り除く場合はnull。

newSlot object?

子へ割り当てるslot。

Element?

更新または生成された子Element。子を取り除いた場合はnull。

親Elementから、このElementで参照可能なInheritedWidgetのマップを引き継ぎます。

protected virtual void UpdateInheritance()

このElementのSlotを更新します。

protected virtual void UpdateSlot(object? newSlot)

newSlot object?

新しいslot。

子Elementのslotを更新し、RenderObjectを持つ子孫へ届くまで引き継ぎます。

protected void UpdateSlotForChild(Element child, object? newSlot)

child Element

slotを更新する直接の子Element。

newSlot object?

新しいslot。

このElementが直接管理する子Elementを列挙します。

public virtual void VisitChildren(Action<Element> visitor)

visitor Action<Element>

各子Elementに一度ずつ適用する処理。

Element.Widget, Element.RenderObject