메소드 체인으로 걸는 Modifire의 데이터 구조는 어떻게 되어 있는가

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 {
...



위에서 제목의 건은 끝입니다.

아래에 관심이 있다면.

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 라는 것이 들어 있다.


materialize 후



composed()로 전달된 Composable 함수가 호출되어 SemanticsModifierCore가 들어 있다.

좋은 웹페이지 즐겨찾기