Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- livedata
- GitHub
- Codeforces
- 프로그래머스
- MiTweet
- architecture
- TEST
- Compose
- activity
- 백준
- Hilt
- 쿠링
- Coroutines
- pandas
- Kotlin
- Rxjava
- MyVoca
- AWS
- boj
- 암호학
- Gradle
- relay
- androidStudio
- 코드포스
- Python
- android
- Coroutine
- 코루틴
- textfield
- ProGuard
Archives
- Today
- Total
이동식 저장소
[Relay] Slot 구현하기 본문
Compose에서 slot이란 사용자가 원하는 뷰로 채울 수 있게 비워둔 공간을 의미한다. 주로 컨테이너 역할을 하는 composable을 구현할 때 사용하는 패턴이다. 예를 들어 ``TopAppBar``에는 다음 그림처럼 빈 공간이 3개 있는데, 왼쪽부터 각각 ``navigateIcon``, ``title``, ``actions``를 위한 공간으로 할당되어 있다.
@Composable
fun TopAppBar(
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
navigationIcon: (@Composable () -> Unit)? = null,
actions: @Composable RowScope.() -> Unit = {},
backgroundColor: Color = MaterialTheme.colors.primarySurface,
contentColor: Color = contentColorFor(backgroundColor),
elevation: Dp = AppBarDefaults.TopAppBarElevation
): Unit
Relay에서도 slot API를 구현할 수 있다. 정확히는 동적인 자식 컴포넌트를 만드는 방식으로 구현된다.
Figma에서 children parameter 추가하기
Slot으로 지정할 공간을 선택한 후, Relay 플러그인에서 Parameters - children 항목을 눌러 해당 공간을 children으로 지정한다.나는 이미지 밑의 공간을 slot으로 지정했다.
이미지 밑의 공간이 children으로 지정되었다. Android Studio에서 확인해 보면 정말로 ``buttons`` 매개변수가 추가됐다. 이제 저 공간은 사용자가 원하는 대로 사용할 수 있다.
/**
* This composable was generated from the UI Package 'image_selector'.
* Generated code; do not edit directly
*/
@Composable
fun ImageSelector(
modifier: Modifier = Modifier,
buttons: @Composable RelayContainerScope.() -> Unit
) {
TopLevel(modifier = modifier) {
Image()
Buttons {
buttons()
}
}
}
프리뷰에는 Figma에서 만든 대로 두 개의 버튼이 보여지지만, 이건 프리뷰일 뿐 사용자가 content를 제공하지 않는다면 그저 빈 공간으로 남아있게 된다.
프리뷰 코드를 보면 이전에 만들었던 ``SampleButton``이 재활용된 모습을 확인할 수 있다. Figma에서 UI를 만들 때 실제로 component를 재활용했기 때문이다.
@Preview(widthDp = 200, heightDp = 150)
@Composable
private fun ImageSelectorPreview() {
RelayTestTheme {
ImageSelector(
buttons = {
SampleButton(text = "Cancel")
SampleButton(text = "Select")
}
)
}
}
더 보기
'Primary > Compose' 카테고리의 다른 글
Brush로 다양한 색깔 효과 입히기 (0) | 2023.01.04 |
---|---|
[Compose] LazyList에서 아이템을 추가했을 때 스크롤 위치를 기억하는 방법 (0) | 2022.12.14 |
[Relay] Compose Theme에 접근하는 방법 (0) | 2022.11.28 |
[Relay] Under the hood (0) | 2022.11.27 |
[Relay] 설치 및 체험 (0) | 2022.11.26 |
Comments