compose 12

[Compose] 스크롤 안에 (뷰 페이저 + 스크롤) 있는 경우

(Column + verticalScroll) 안에 (HorizontalPager + LazyVerticalGrid)가 들어가면 wrapHeight가 안 된다.앱이 죽는다..에러 : Vertically scrollable component was measured with an infinity maximum height constraints, which is disallowed. 그 경우 .heightIn(max = VIEWPAGER_MAX_HEIGHT.dp) 로 LazyVerticalGrid의 맥스 값을 지정 해주면해당 크기 만큼 설정이 된다. 문제점 : heightIn은 다음 페이지의 크기가 작아지면 wrap하게 된다. (각 페이지의 height)가 다를 수 있다.만약 1페이지의 크기와 2페이지의 크기..

[Compose] 컴포즈 실전 내가 경험한 Tip !

mutableStateOf 사용시 유의할 점@Composable함수 내에서 mutableStateOf를 사용할 때, remember를 사용해야 한다.mutableStateOf 대신 mutableIntStateOf를 사용하는 것이 더 성능이 좋다 (린트 경고)Compose 매개변수 정렬 규칙필수 매개변수 (State 포함)이벤트 핸들러 (onClick, onChange 등)이벤트 핸들러는 “발생할 때”를 의미하기 때문에 현재형을 사용해야 함.modifier: Modifier = Modifier기본값을 가진 선택적 매개변수content: @Composable () -> Unit (Trailing Lambda, 선택적)예외 사항 (Trailing Lambda)Compose에서 onClick: () -> Uni..

[Compose] 컴포즈 코드 작성시 유의할 점(네이밍, 상태, 데이터 전달)

컴포즈 코드 작성시 유의할 점(네이밍, 상태, 데이터 전달)이제 컴포즈 실전에 투입했다.공부 하고, 알아 보면서 유의할 점과 경험 했던 것들을 정리 해보려고 합니다.도움이 되시길 바랍니다.! 컴포저블 함수 네이밍파스칼 표기법(PascalCase): UI 컴포넌트형 컴포저블 함수는 HomeScreen처럼 대문자로 시작하는 단어들을 연결하여 선언합니다.카멜 표기법(CamelCase) + 동사구: 값을 반환하는 컴포저블 함수는 rememberScrollState처럼 소문자로 시작하며 동작을 표현하는 네이밍을 사용합니다. 상태 복제상태를 가공하거나 복제한 데이터를 전달하면, 전달된 데이터는 상위와 하위 사이에서 더 이상 동기화되지 않습니다.@Composablefun TransformedCounter(count:..

[Compose] 코드 작성시 유의할 점 - internal 함수

코드 작성시 유의할 점 - internal 함수이제 컴포즈 실전에 투입했다.공부 하고, 알아 보면서 유의할 점과 경험 했던 것들을 정리 해보려고 합니다.도움이 되시길 바랍니다.!예제들 보면 internal 접근 제어자가 붙은 것들이 있다.- 같은 모듈에서만 해당 요소를 사용할 수 있도록 제한 하는것.컴포즈 함수 작성시 유의해서 작성하면 좋을 것 같다. internal 함수Kotlin에서 internal 접근 제어자를 사용하면 같은 모듈 내에서만 해당 요소를 사용할 수 있도록 제한할 수 있습니다. 특히 Compose 함수를 작성할 때 유의해서 사용하면 코드의 모듈성을 높이는 데 도움이 됩니다.internal로 제한하는 이유1. 모듈 내부의 캡슐화 유지특정 모듈에서만 사용되는 요소는 내부 구현을 숨기는 것이..

컴포즈(compose) 상호 운용 API 자세히 알아보기

대부분의 커스텀 컴포넌트를 제공하는 서드파티 라이브러리는 뷰로 작성되었고 컴포즈를 사용하면서 이를 재사용 할 수 있어야합니다. 예를들어 이미지피커, 색상선택, QR리더 등 뷰로 작성된 컴포넌트를 컴포즈에서 임베디드 해서 사용해야합니다. 컴포즈앱에서 뷰를 사용하는 방법을 알아봅니다 또한 임베디드한 뷰와 컴포즈 간에 데이터를 공유해야하기 때문에 ViewModel을 사용해 구현하는 방법을 알아봅니다. 그리고 뷰기반 앱에서 컴포즈 계층구조를 추가하는 방법도 알아봅니다. 주요 키워드 AndroidView AndroidViewBinding ComposeView 컴포즈 앱에서 뷰 나타내기 컴포즈 앱에 이미지피커, 색상선택, QR리더와 같은 서드파티 라이브러리를 포함한다고 가정해봅니다. 컴포저블 함수에 뷰를 추가해야하..

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 7장에서는 초기화 후에 객체를 ViewModel에 전달하는 방법 객체를 사용해 데이터를 불러오고 저장하는 방법을 알아본다. 상태 유지와 검색 이전에 배운것 컴포즈 앱에서는 상태를 State나 MutableState의 인스턴스로 나타낸다. 상태가 변경됨에 따라 재구성 동작을 유발한다. 상태를 전달 받아 호출한곳으로 상태를 옮기는 것을 상태 호이스팅이라 부른다. 이러한 상태는 종종 사용하는 부모 컴포저블 중 하나에서 기억되는 경우도 있다. → 다른 대안으로 ViewModel 패턴으로 구현하는 방법이 있다. ViewModel 인스턴스는 데이터 초깃값을 어디서 가져오고, 데이터가 변경되면 무슨일을 하게 되는가? 안드로이드에서는 리포지터리 패턴 제안(책에서) 생성 class ViewMod..

컴포즈(compose) 앱 스타일링

컴포즈 앱 스타일링 1 색상, 모양, 텍스트 스타일의 정의 대부분의 컴포즈 UI는 android.compose.material 패키지에 내장된 컴포저블 함수를 사용할 것이다. 브랜드나 회사들은 그들의 정체성을 반영하는 색상, 모양, 텍스트 컬러를 정의하곤 한다. 그렇기 때문에 기본적으로 제공되는 머터리얼 컴포저블 함수의 모양을 수정할 필요가 있다. 머터리얼 테마의 메인 진입점은 MeterialTheme()이다. 이 컴포저블은 커스텀 색상, 모양, 텍스트 스타일을 매개변수로 전달받는다. 값을 설정하지 않으면 그에 상응하는 기본값이 사용된다. @Composable fun ComposeUnitConverterTheme( darkTheme: Boolean = isSystemInDarkTheme(), //isSy..

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 상태를 갖지 않는 컴포저블과 상태를 갖는 컴포저블 간의 차이점 이해 언제 어떠한 것을 선택할지 살펴본다. 상태를 갖거나 갖지 않는 컴포저블 함수 이해 상태 : 시간이 흐름에 따라 변하는 데이터 UI는 항상 현재 데이터를 보여줘야만 한다는 것이 중요 따라서 값이 변경되면 반드시 UI에 알려야 함. 옵저버블 타입을 사용 State는 기본 인터페이스로, value라는 이름을 갖는 프로퍼티에 특정 타입의 값을 저장하는 객체인 값 홀더(value holder)를 정의 컴포저블 함수가 실행되는 동안 value가 변경될 때마다 재구성될 것이다. 내부적으로 RecomposeScope 인터페이스가 값의 변경 사항을 구독하고 있을 것이기 때문 값이 변경될 수 있게 하려면 MutableState의 ..

컴포즈(Compose) UI 요소 배치

미리 정의된 레이아웃 사용 고려해야 할 세가지 축 수평(Horizontal) 수직(Vertical) 스택(Stacked) Row() - 가로 Column() - 세로 Box() & BoxWithConstraint() - 콘텐츠를 맨위에 쌓음. CheckBox() - 현재 상태(checked)와 선택하면 호출되는 람다(onCheckedChange)를 받는다 함수 작성시점에 레이블 전달할 수 없다. 대신 CheckBox(), Text()를 Row()안에 포함해 유사한 결과물 만들 수 있다. CheckBoxWithLabel()은 MutableState을 받는다. onCheckedChange 내부에서 값이 변경되면 다른 컴포저블 함수를 재구성해야 하기 때문이다 제약 조건을 기반으로 하는 레이아웃 생성 코드를 단..

컴포즈(Compose) 컴포즈 핵심 원칙 자세히 알아보기

잿팩 컴포즈가 의존하고 있는 핵심 원칙을 검토 컴포저블 함수 자세히 살펴보기 컴포저블 함수의 구성 요소 @Composable 어노테이션을 포함하는 코틀린 함수 컴포즈 컴파일러에 해당 함수가 데이터를 UI로 변환 한다는 것을 알림 코틀린 함수 시그니처 선택 사항인 가시성 변경자(private, protected, internal 또는 public) fun 키워드 함수명 매개변수 목록 또는 선택적 기본값 채택 선택 사항인 반환 타입 코드블록 컴포저블 함수명은 파스칼(PascalCase) 표기법을 사용 대문자로 시작하지만 나머지 문자는 소문자로 나타낸다. 두 단어 이상으로 되어있다면 이름은 명사(Demo) 서술형 형용사를 접두어로 갖는 명사(FancyDemo)여야 한다. 다른 코틀린 함수와는 다르게 컴포저블 ..