728x90
이번에는 PostCreateViewModel에 대해서 리뷰를 해보자.
전체 코드
class PostCreateViewModel : ViewModel() {
private val _uiState = MutableStateFlow(PostCreateUiState())
val uiState = _uiState.asStateFlow()
fun selectImage(uri: Uri) {
_uiState.update { it.copy(selectedImage = uri) }
}
fun changeToEditMode() {
_uiState.update { it.copy(isCreating = false) }
}
@RequiresApi(Build.VERSION_CODES.O)
fun uploadContent(content: String) {
_uiState.update { it.copy(isLoading = true) }
viewModelScope.launch {
val result = PostRepository.uploadPost(content, uiState.value.selectedImage!!)
if (result.isSuccess) {
_uiState.update { it.copy(successToUpload = true, isLoading = false) }
} else {
_uiState.update {
it.copy(
userMessage = R.string.failed,
isLoading = false
)
}
}
}
}
fun editContent(uuid: String, content: String) {
_uiState.update { it.copy(isLoading = true) }
viewModelScope.launch {
val result: Result<Unit> = if (_uiState.value.selectedImage != null) {
PostRepository.editPost(uuid, content, uiState.value.selectedImage!!)
} else {
PostRepository.editPostOnlyContent(uuid, content)
}
if (result.isSuccess) {
_uiState.update { it.copy(successToUpload = true, isLoading = false) }
} else {
_uiState.update {
it.copy(
userMessage = R.string.failed,
isLoading = false
)
}
}
}
}
fun userMessageShown() {
_uiState.update { it.copy(userMessage = null) }
}
}
부분 코드 설명
- MutableStateFlow 및 StateFlow:
- _uiState는 MutableStateFlow로, 상태의 변경을 허용합니다. 초기값으로 PostCreateUiState()를 갖는다.
- uiState는 _uiState를 asStateFlow()로 변환하여 외부로 불변의 StateFlow로 제공한다.
- selectImage 함수:
- 이미지가 선택되면 해당 이미지의 Uri를 받아와서 _uiState를 업데이트한다.
- changeToEditMode 함수:
- 편집 모드로 전환하는 함수로, _uiState의 isCreating 속성을 false로 변경한다.
- 그리고 만약 변경된다면 이것은 포스팅 생성 화면이 아니라 포스팅 편집 화면이라는 것을 의미한다.
- uploadContent 함수:
- 게시물을 업로드하는 함수로, PostRepository.uploadPost를 호출하여 게시물을 업로드한다.
- 결과에 따라 _uiState를 업데이트하고, 업로드 성공 시 successToUpload를 true로, 실패 시 오류 메시지를 설정한다.
- editContent 함수:
- 게시물을 편집하는 함수로, PostRepository.editPost 또는 PostRepository.editPostOnlyContent를 호출하여 게시물을 편집한다.
- 결과에 따라 _uiState를 업데이트하고, 편집 성공 시 successToUpload를 true로, 실패 시 오류 메시지를 설정한다.
- userMessageShown 함수:
- 사용자 메시지가 표시되었음을 나타내는 함수로, _uiState의 userMessage를 null로 설정한다.
728x90
'Android > Study' 카테고리의 다른 글
[Android] 포스팅 업로드 구현 (4) - Repository (0) | 2024.02.28 |
---|---|
[Android] 포스팅 업로드 구현 (3) - 화면 XML (0) | 2024.02.26 |
[Android] 포스팅 업로드 구현 (1) - Activity (0) | 2024.02.26 |
[Android] 로그인 기능 구현 (4) - Repository (0) | 2024.02.09 |
[Android] 로그인 기능 구현 (3) - ViewModel (0) | 2024.01.21 |