돌아오신 것을 환영합니다
이 영상에서는 ViewModel을 준비하여 DetailView 화면에서 사용할 수 있도록 하겠습니다
ViewModel을 오늘 최종 완성하지는 못할 것입니다
ViewModel에는 필요한 내용이 많기 떄문입니다
즉 Wish 저장소에서 데이터 저장, 로드, 수집, 수정 등을
하게 되는데. 이것을 이 ViewModel에서 사용할 것입니다
일단 해야 하는 작업은 wishTitleState by
MutableStateOf이고 MutableState를 import로 가져오는 문자열입니다
그 다음으로는
여기 있는 getValue와 setValue를 import로 가져와야 합니다
즉 runtime 두 개를 추가하겠습니다
두 개가 아니라 세 개를 더하겠습니다
이렇게 wishTitleState를 만들었습니다
이제 description(설명)에 대한 state(상태)를 관리할 것도 추가하겠습니다
이름은 wishDescriptionState이고
이것 또한 문자열입니다
이제는 wishTitleChanged에서 수행할 작업을 관리해야 하는데
새로운 문자열을 pass(전달)하겠습니다
또 wishTitleState는 다른 새 문자열로 overwrite(덮어쓰기)하도록 하겠습니다
즉 wishViewModel에게 명령하되
이 wishTitleState를 사용할 수 있게 해 달라고 명령하는데, 이렇게 하면 항목의 title(제목)을 수정할 때마다
Mutable state(가변적인 상태)가 됩니다
바로 이 제목입니다
이게 바뀔 때마다 그것을 표시하고 이 WishTitleState 안에
저장하는 것입니다
이제 같을 것을 description(설명)에 대한 state(상태)에도 반복하겠습니다
즉 fun onWishDescriptionState
이것 또한 문자열을 요구하므로 newString이라고 하겠습니다
이 wishDescriptionState가 바로 이 newString이 될 것입니다
네
이 정도로 ViewModel 작업은 일단 마무리하겠습니다
말씀드린 대로 훨씬 더 많은 정보를 나중에 추가하겠지만 일단은 이 정도로
AddEditDetailView를 테스트해 보는 데는 충분합니다
이제 AddEditDetailView로 넘어와서 wishTextField를 사용해 보겠습니다
이제 이것을 label로 pass(전달해서), 이를테면 "제목“이고 value는 ViewModel.wishTItleState
이것은 onvalueChanged에서 일어나는 일이고 여기에는
이 부분은 다른 줄로 나누겠습니다
가독성을 위해서입니다
이것은 ViewModel.onWishTitleChanged(it)이 됩니다
여기 있는 it은 여기서 가져온 문자열입니다
즉 wishTextField를 생성할 때마다
이렇게 label, value 및 onvalueChange를 받는데, 여기에는
문자열을 parse(파싱)해서 텍스트를 변경한다고 알려주고 있습니다
이 작업은 텍스트가 ovalueChange에서 pass(전달)될 때 일어나는 일입니다
즉 이 필드를 수정할 때마다, 글자를 바꿀 때마다
여기 이 onvalueChange가 작동하면서 화면에 보이는 내용을 업데이트함과 동시에
ViewModel 또한 업데이트하는 것입니다
같은 작업을 다시 해 보겠습니다
여기에 새 spacer(스페이서)를 추가하고 픽셀 밀도를 보겠습니다
이것의 이름은 "설명“으로 하겠습니다
여기에서는 wishTitleState가 아니라 wishDescriptionState를 사용합니다
그리고 여기에는 onWishDescriptionState를
OnTitle이나 onWishTitleChanged 혹은 WishTitle 대신 사용하겠습니다
여기에 제가 onWishDescriptionState라고 했는데 그 대신에 Changed를 써야 합니다
그래야 여기 있는 Changed와 같아질 것입니다
좋습니다
OnWishTitle에 대한
필드였습니다
이제 여기에 spacer(스페이서)를 더하고 “항목 수정 반영”이라고 하는 버튼을 추가하겠습니다
그리고 여기에 button 추가하기 위해서는 import를 사용해야 합니다
Material 버전을 사용하는 composable(컴포저블)입니다
그리고 onClick을 쓰고 일단은 아무 작업도 하지 않게 하고
Content(내용)으로는 텍스트를 표시하되 이 텍스트는 뭔가를 받아왔는지에 따라
달라질 것입니다
그래서 일단 여기 두겠습니다
즉 이 텍스트는 우리가 가진 ID가
0과 같지 않다면
현재 업데이트 중이라는 뜻입니다
만약 ID가 0이라면 현재 항목을 추가하는 중이라는 뜻입니다
이 두 가지는 그런 의미입니다
그 다음에는 이 텍스트에 fontSize 형식으로 18.sp를 쓰겠습니다
네
이 버튼이 표시할 것은 이 정도입니다
그 다음에는 onClick에서 수행할 것도 정의할 수는 있지만 아직 완성하지는 못할 것입니다
여기서 구현하려고 하는 작업은 결국
데이터베이스 Room에 입력한 그 데이터 조각을 추가하는 것이기 떄문입니다
지금은 아직 먼 얘기이지만 내일 작업해 보도록 하겠습니다
여기에서는 ViewModel.wishTitleState가 비어 있지 않다면, 그리고
ViewModel.wishDescriptionState가 비어 있지 않다면
이것을 수정하겠습니다
즉 onClick에서 비교 작업을 수행하는데 여기에서는
사용자와 여기와 또 여기에 뭔가를 입력하는지 확인할 것입니다
만약 이 둘이 비어있지 않다면 그대로 저장하되
즉 Wishlist(위시리스트) 항목을 업데이트하는 것입니다
즉 여기에 function(함수)를 하나 만들어서 항목을 업데이트하도록 하겠습니다
여기에 TODO를 추가해서 나중에 작업하도록 하고
여기에는 항목을 더해야 하므로
여기에는 TODO AddWish를 쓰겠습니다
좋습니다
이 모든 것을 차근차근 작업해 나갈 것입니다
물론 데이터베이스 Room 설정 및 많은 작업이 선행되어야 합니다만
오늘 영상은 여기까지 하고, 오늘은 AddEditDetailView 화면을준비하는 작업을 좀더 했습니다
다음 영상에서 뵙겠습니다