1. 진행상황
픽정보
화면 전환 및 뷰모델 공유
navigation(
startDestination = CreatePickDestinations.SEARCH_MUSIC_ROUTE,
route = CreatePickDestinations.SEARCH_ROUTE
) {
composable(CreatePickDestinations.SEARCH_MUSIC_ROUTE) {
val parentEntry = remember(it) {
navController.getBackStackEntry(CreatePickDestinations.SEARCH_ROUTE)
}
SearchMusicScreen(
createPickViewModel = hiltViewModel<CreatePickViewModel>(parentEntry),
onBackClick = {
navController.popBackStack()
},
onItemClick = navigationActions.navigateToCreate
)
}
composable(CreatePickDestinations.CREATE_PICK_ROUTE) {
val parentEntry = remember(it) {
navController.getBackStackEntry(CreatePickDestinations.SEARCH_ROUTE)
}
CreatePickScreen(
createPickViewModel = hiltViewModel<CreatePickViewModel>(parentEntry),
onBackClick = {
navController.popBackStack()
}
)
}
}
- NavHost 내부에 중첩된 Navgation 만들고
- 상위 NavBackStackEntry의 뷰모델을 공유하도록한다
@HiltViewModel
class CreatePickViewModel @Inject constructor(
private val searchSongsUseCase: SearchSongsUseCase,
private val searchMusicVideoUseCase: SearchMusicVideoUseCase,
private val createPickUseCase: CreatePickUseCase
) : ViewModel() {
private var _selectedSong: Song? = null
val selectedSong get() = _selectedSong
- SearchScreen과 CreatePickScreen에서 같은 뷰모델을 공유하므로 selectedSong 데이터에 둘다 접근 가능함
CreatPickScreen 에 노래 표시
- 공유된 CreatePickViewModel을 통해 selectedSong의 정보를 CreatPickScreen 에서 표시
Firestore에 픽 생성 기능 구현
- Firebase 데이터소스, 레포지토리에 createPick() 함수 구현
- 데이터 소스에서 Firestore의 picks 컬렉션에 새 문서를 랜덤 ID로 등록
- 등록 성공 시 데이터소스에선 새로 만들어진 pick 문서의 id ( = pick id) 리턴
- 레포지토리에선 데이터소스의 성공/예외 여부에 따라 Result.Success 혹은 Failure 리턴
- CreatePickViewModel에서 유스케이스를 통해 이 결과를 받아서 처리한다
- CreatPickScreen 에서 우측 상단 등록버튼을 누르면 뮤비 프리뷰 url을 받아온 후 Firebase에 Pick 등록