현재 기존 개발한 개인 프로젝트를 컴포즈로 변경하면서 겪고 있는 일들에 대해
적어보려고 합니다.
activity에서 컴포즈 setContent가 동작하지 않음.
아래 의존성을 추가해줘야만 동작을 합니다.
//setContent
implementation "androidx.navigation:navigation-compose"
//or
implementation 'androidx.activity:activity-compose:1.7.1'
각종 사용하던 의존성을 지울 수가 있음 (물론 컴포즈용 의존성이 추가되긴 하지만 결과적으로는 좀 줄어듬)
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
스와이프 리프레시 레이아웃 등..
ViewModel 없이 UI를 작성하려고 했지만 테스트 데이터를 설정하는 것은 됬지만 상호작용이 되지 않아. 사용자와 상호작용을 위해서는 ViewModel을 작성해야 함을 이해함
ViewModel에서 viewModelScope를 사용해야하는데 나오지 않음
아래 뷰모델 의존성 추가하기
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1"
PullRefreshIndicator 사용법
Box(
Modifier
.fillMaxSize()
.pullRefresh(pullRefreshState)
.verticalScroll(rememberScrollState())
) {
PullRefreshIndicator(
refreshing = false,
state = pullRefreshState,
modifier = Modifier.align(Alignment.TopCenter)
)
}
리스트를 넣어야 할 경우 또는 중앙에 배치 하고 싶을때 (해결하는데 매우 오래 걸림ㅠ)
중앙에 배치 하고 싶을때는 box로 한번 더 감싼 후 아래와 같이 배치해서 해결 했습니다.
Box {
val pullRefreshState = rememberPullRefreshState(uiState.isRefreshing, onRefresh ?: { })
Box(
Modifier
.fillMaxSize()
.pullRefresh(pullRefreshState)
.verticalScroll(rememberScrollState())
) {
//리스트 아이템의 경우
PullRefreshIndicator(
refreshing = uiState.isRefreshing,
state = pullRefreshState,
modifier = Modifier.align(Alignment.TopCenter)
)
}
// 중앙에 배치하고 싶을때
if (uiState.isEmptyFeed) {
EmptyFeed()
}
}