인기 투표 서비스
로그인 화면 | 메인 화면 |
---|---|
![]() |
![]() |
사용자 ID를 입력받고 메인 화면으로 이동합니다. | 인기투표 포스터, 투표와 관련한 정보, 인기투표 후보자 목록이 있습니다. 2025년 2월 3일에 종료되는 카운트다운이 표시됩니다. |
상세 정보 화면 | 투표하기 |
---|---|
![]() |
![]() |
후보자의 상세 정보를 표시합니다. | 해당 후보자에게 투표를 진행합니다. 한 번 투표한 후보자에게 재투표는 불가능하고, 최대 3명에게 투표할 수 있습니다. |
- Retrofit
- Okhttp
- MVVM
- Coil
- Jetpack Compose
- Compose navigation
- Dagger hilt
📂 app
┣ 📂 common
┃ ┣ 📂 compose
┃ ┣ 📂 font
┃ ┣ 📂 navigation
┃ ┣ 📄 Constants
┃ ┗ 📄 Resources
┣ 📂 core
┃ ┣ 📂 api
┃ ┣ 📂 data
┃ ┃ ┣ 📂 request
┃ ┃ ┗ 📂 response
┃ ┗ 📂 repository
┣ 📂 di
┣ 📂 feature
┃ ┣ 📂 login
┃ ┃ ┣ 📂 component
┃ ┃ ┗ 📄 LoginScreen
┃ ┣ 📂 main
┃ ┃ ┣ 📂 component
┃ ┃ ┣ 📄 MainScreen
┃ ┃ ┗ 📄 MainViewModel
┃ ┣ 📂 profile
┃ ┃ ┣ 📂 component
┃ ┃ ┣ 📄 ProfileScreen
┃ ┃ ┗ 📄 ProfileViewModel
┃ ┣ 📂 state
┃ ┗ 📂 util
┣ 📂 ui
┃ ┗ 📂 theme
┣ 📄 MainActivity
┗ 📄 PopularityVoteApplication
- MainScreen에서 LazyColumn item으로 Grid Layout 적용 문제
- LazyColumn으로 scroll 가능한 screen 제작 중 후보자 정보를 Grid Layout으로 표시하던 중 발생한 문제
- LazyColumn 안에 LazyVerticalGrid를 활용해 제작했는데, 두 Component의 scroll이 겹쳐서 발생한 문제임을 알게 됨.
- LazyVerticalGrid의 scrollable을 disable로 바꾸고, maxHeight를 지정해 주어서 문제를 해결함.
- ProfileScreen의 ProfileImageHorizontalPager에서 사용자 이미지 정보를 표시하는 AsyncImage에서 이미지를 로딩 중일 때, 순간 AsyncImage가 사라지는 문제
- AsyncImage의 height를 지정해 주지 않아서 이미지의 영역이 제대로 표시되지 않는다는 것을 알게 되었음.
- AsyncImage 로딩 중 표시할 Composable을 정의하기 위해 SubcomposeAsyncImage으로 변경 후, height가 fillMaxWidth로 정의된 width와 1:1의 비율을 가질 수 있도록 aspectRatio를 이용해서 height를 정의함.
- AsyncImage의 height를 지정해 주지 않아서 이미지의 영역이 제대로 표시되지 않는다는 것을 알게 되었음.