돌아오신 것을 환영합니다
이제 상세 화면을 만들었으니 그 화면으로 이동할 방법을 찾아야 합니다
그러기 위해서는 준비한 탐색 기능을 이용해야 합니다
이미 탐색이 어떻게 실행되는 지를 알아보았습니다
NavHost가 필요하고
NavHost에 전달한 NavController가 필요하며
애플리케이션의 시작 지점인
컴포저블이 필요한데 지금은 레시피 화면이기 떄문에 괜찮습니다
그리고 레시피 화면에서 상세 화면으로 정보를 전달해서 상세 화면이
무엇이 보여져야 하는 지를 알아야 합니다
그리고 우리가 전달할 정보는 카테고리입니다
예제에서 했던 것처럼 스트링이나 불리언, 정수 등의 작은 것을 전달하는 대신에
객체 전체를 전달할 것인데 클래스를 전달하려면
때로는 파싱하고 직렬화하는 것이 쉽습니다
무언가를 파싱 가능하게 하고 직렬화하여 직렬화 및 역직렬화할 수
있는데
무슨 뜻인지는 조금 뒤에 살펴보겠습니다
지금은 탐색의 설정을 시작해보겠습니다
좋습니다
보시는 것처럼 해야 할 것들이 제법 있는데
CategoryItem부터 시작하겠습니다
ReceipeScreen.kt파일에 CategoryItem이 있는데
이를 변형해야 합니다
category만 전달하는 것이 아니라 탐색할 상세정보도 전달해야 합니다
navigateToDetail이라고 하고
Category객체를 전달하며
아무 것도 리턴하지 않습니다
그러므로 이 함수는 그저 CategoryItem을 탐색할 것입니다
이 컬럼이 있고 fillMaxSize와
horizontalAlignment등이 있는데
이 카테고리 항목을 클릭하고 싶습니다
멋진 점은 컴포저블이 clickable이라는 속성을
갖고 있다는 것입니다
clickable이라는 이벤트가 있는데
제어자에 적용할 수 있으며 fillMaxSize의 밖이 아니라 안에서
.clickable이라고 입력합니다
보시는 것처럼 clickable이라는 함수가 있습니다
이제 Column 컴포저블을 클릭하면 무슨 일이 일어날 지를 정할 수 있는데
카테고리 항목은
우리 애플리케이션의 전체 항목으로 한 줄에
두 항목씩 있는 것을 뜻합니다
왜냐하면 지금 우리가 하는 것은 카테고리 항목이 잔뜩 있는 CategoryScreen의
LazyVerticalGrid는 두 컬럼을 갖고 있기 때문인데
이 항목들이 클릭이 가능하게 하는 것입니다
클릭하면 일어날 일은
CategoryItem에 전달되는 이 함수를 호출하는데
category를 전달합니다
여기 전달하는 category는 여기서 전달하는데 이 category를 navigateToDetail함수에
전달해서 다른 화면으로
이동할 것입니다
보시면 CategoryScreen의 CategoryItem에 오류가 발생했는데 이제 함수도
필요하기 때문입니다
혹은 실행될 코드말입니다
이제 제가 하려는 것은 이 일을 상위 레벨에 주려 합니다
CategoryScreen안에서 navigateToDetail이 동일하게 작동하는
것입니다
그러므로 여기에도 전달하면
이 책임을 더 높은 레벨에 전달하는데 CategoryItem이 실제 구현을 담당하지
않을 것이기
때문이며 CategoryScreen도 아닌 더 상위 레벨이
담당할 것입니다
이는 ReceipeScreen조차 아닙니다
우선 여기부터 처리합니다
여기에 navigateToDetail을 전달하고
이제 CategoryScreen을 호출하는 ReceipeScreen에도 동일한 일을 해야합니다
이렇게 navigateToDetail이라는 또 다른 정보를 추가하면
ReceipeScreen이 미래에 이를 담당할 것입니다
이제 보시는 것처럼 누군가 ReceipeScreen을 호출하면 무엇이 실행될 지도 전달해야
합니다
좋습니다
이 전에 모든 탐색을 담당하도록 만들어진 MyApp이라는 앱에서 보았듯이
동일한 것을 할 것입니다
CategoryScreen이 viewstate 리스트를 받고 있는데 navigateToDetail은 받지 않고
있습니다
그러므로 여기에도 전달합니다
탐색 세부 정보를 알아야 하는
실제 탐색이 실행될 곳은 개별 항목에서 구현되지 않습니다
그러니까 UI가 그 로직을 구현하지 않습니다
이는 그저
업무를 상위 레벨로 올려 보낼 뿐입니다
CategoryItem은 CategoryScreen안에 있는데 이는 ReceipeScreen안에 있습니다
그러므로 우리는 이를 위로 계속 올려 보내고 있습니다
그래서 ReceipeScreen을 생성하는 곳에서 navigateToDeatil을 전달해야 합니다
MainActivity에 오류가 발생한 것을 보실 수 있는데
여기에서 ReceipeScreen을 설정하기 때문입니다
이제 RecipeScreen은 탐색이 작동하는 구현이 필요한데
다음에 알아보겠습니다
다음 강의에서 알아 보도록 하겠습니다 왜냐하면 전체 탐색 구현 등을
설정해야 하기 때문입니다
다음 강의에서 하도록 하겠습니다