메소드 체인으로 걸는 Modifire의 데이터 구조는 어떻게 되어 있는가
5634 단어 안드로이드JetpackCompose
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가 들어 있다.
Reference
이 문제에 관하여(메소드 체인으로 걸는 Modifire의 데이터 구조는 어떻게 되어 있는가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takahirom/items/f101b29d98c7c6631eb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)