3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

メソッドチェーンでかけるModifireのデータ構造はどうなっているか

Posted at

Modifireはたくさんつなげてかけると思うのですが、どうなっているんでしょうか?

Modifier
            .fillMaxWidth()
            .offset(y = targetValue)
            .semantics(mergeDescendants = true) {}

CombinedModifierが作られます。CombinedModifierはouterとinnerのModifireを持ち、CombinedModifierは数珠つなぎにできて、複数個あるときはこのouterの方に同じように連なるだけです。

class CombinedModifier(
    private val outer: Modifier,
    private val inner: Modifier
) : Modifier {
...

image.png

上記でタイトルの件は終わりです。


下記は興味があれば。

ModifireのComposable関数を渡せるものはどうなっているのか?

そんなに知られていないかもですが、composed{}というのを使うとModifireの変更をComposable関数の中でできるんですよね。そこがどうなっているのかを見てみます。

    MultiMeasureLayout(
        modifier = modifier.semantics { designInfoProvider = measurer } 

例えばModifier.semantics()は以下のような形になっていて、composed() {}でComposable関数を渡しています。このComposable関数はどこでどうやって使われるの??ということです。

fun Modifier.semantics(
    mergeDescendants: Boolean = false,
    properties: (SemanticsPropertyReceiver.() -> Unit)
): Modifier = composed( // ← ここでcomposed{}を呼び出している
    inspectorInfo = debugInspectorInfo {
        name = "semantics"
        this.properties["mergeDescendants"] = mergeDescendants
        this.properties["properties"] = properties
    }
) {
    val id = remember { SemanticsModifierCore.generateSemanticsId() }
    SemanticsModifierCore(id, mergeDescendants, clearAndSetSemantics = false, properties)
}

Lauyout()関数などの実際にレイアウトを行うComposableの中でmaterialize()という関数が呼び出されて、materialize()がModifireがもつComposable関数を呼び出していって、その結果がCombinedModifierに入るだけです。

    val materialized = currentComposer.materialize(modifier)

materialize前

ComposedModifireというものが入っている。
image.png

materialize後

composed()で渡されたComposable関数が呼ばれて、SemanticsModifierCoreが入っている。
image.png

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?