좋습니다 연습해보셨기를 바랍니다
이 번에는 바로 구현하지 않고 한 화면에서 다른 화면으로 데이터를 어떻게 넘기는 지를
보여드리겠습니다
첫 화면에서 두 번째 화면으로 이름을 넘기는 것이며
해보도록 하겠습니다
그러려면 SecondScreen에서 이를 호출하려면 스트링 자료형의
이름을 넘겨줘야 합니다
끝입니다
명백히 더 할 것이 있지만 말입니다 이 SecondScreen에서 Welcome이라 하지 않고
Welcome $name이라고 하겠습니다
Preview에도 이름을 넘기는데
예를 들어 이름을 Denis라고 하고 navigation함수는 여전히 이
navigateToFirstScreen입니다
이제 FirstScreen으로 돌아 가서 두 번째 화면으로 탐색하려면 이름을 넘겨주어야
합니다
여기 이 name을 넘길 것입니다
그 말은 여기 onClick에서 name.value를 넘긴다는 뜻입니다
그러면 remember의 name 변수의 값을 전달하는 것입니다
그리고 이 navigationToSecondScreen 또한 스트링을 받을 것입니다
그러므로 두 번째 화면을 탐색하려면 스트링을 넘겨주어야 한다는 뜻입니다
그러면 우리가 이 스트링을 넘길 수 있게 됩니다 스트링을 매개 변수로
navigationToSecondScreen에 넘긴다는 뜻입니다
아쉽게도 이 것이 끝이 아닙니다 하나 더 추가해야 하는데 이는
MainActivity의 MyApp에 세부 사항을 추가해야 합니다
여기서도 name을 넘기는데
FirstScreen에 it: String을 볼 수 있습니다
그러므로 스트링을 받았다는 뜻입니다
이 name이라는 스트링을, name이라고 부르겠습니다
이제 여기에 사용할 수 있습니다
/$name입니다
이렇게 해서 탐색할 때 두 번째 화면으로 name을 넘기고 있습니다
그러므로 경로는 이제 단순히 두 번째 화면의 이름이 아닙니다
이 컴포저블 route가 말입니다
name이라는 속성을 넘기고 있습니다
이제 두 번째 화면이 이름을 받아야 하므로
넘겨주어야 합니다
아니, 그러려면 받아야 합니다
슬래시 기호를 사용하고 중괄호 안에 사용할 변수를 입력하면 됩니다
제 경우에는 name입니다
이제 SecondScreen도 이 곳에 name이 필요합니다
이렇게 말입니다 이 name이 무엇이냐면
it에서 받을 name입니다
이 NavBackStackEntry에서 말입니다 새 변수를 만드는데 it.arguments인데
null이 될 수 있고 그 스트링을 키로 받을 것인데
우리가 사용하는 키는 name입니다
그리고 어떤 이유에서 인지 아무 것도 없다면 no name 이라는 기본 값을 사용할 것입니다
그 말은 만약 첫 화면에서 텍스트 창에 아무 것도 입력하지 않고
두 번째 화면으로 이동한다면 Welcome no name이 될 것입니다
이 것이 구조입니다
여전히 조금 복잡할 것입니다
미래에는 코드가 보다 간결해지기를 바라지만 현재는 이렇게 해야 합니다
만약 두 번째 화면에서 첫 번째 화면으로 name을 다시 돌려 보낸다면 여기에서 name을
넘길 수 있습니다
여기 SecondScreen에서 name을 다시 돌려 보내는데 이는 name이
스트링일 것이라고 이 곳에 지정해 주어야 동작합니다
기본적으로 초기에 아무 값도 없던 함수를 변형하고 있습니다
실행하는데 어떤 매개 변수도 필요하지 않았는데
이제는 필요합니다
이제 실행해서 애플리케이션을 테스트 해보고 흐름을 다시 살펴보겠습니다 왜냐하면
많이 바꿨기 때문에 조금 헷갈릴 수 있기 때문입니다
그러므로 확실하게 이해하고 넘어가겠습니다
그리고 이를 다시 연습할 또 다른 예제가 있는데
그 이후엔 더 이해가 가실 겁니다 왜냐하면 흐름을 따라가셔야 합니다
쉽지 않지만 한 번 해 보시면 좋습니다
좋습니다
이제 테스트 해보겠습니다 Denis를 입력하고 두 번째 화면으로 가면 두 번재
화면이 보이며
Welcome Denis라고 표시됩니다
이제 탐색이 잘 동작합니다
한 화면에서 다른 화면으로 데이터를 보내는 법을 알아보았습니다
흐름을 한번 더 따라가 보겠습니다
탐색을 담당하는 이 MyApp이 있는데
그 안에는 다른 화면들이 있는데 경로를 가진 컴포저블들로 route가
올바른 화면을 보여주는 것을 담당합니다
navController가 필요한데 상태 유지적인 navController입니다
그리고 NavHost를 설정해야 하는데 모든 탐색을 담당하며
navController와 startDestination을 넘겨줍니다
즉 firstscreen이 시작 화면인데
firstscreen이 무엇인가요
firstscreen은 FirstScreen 그 자체가 아니라 이 이름일 뿐입니다
그러므로 컴포저블을 설정하고 경로를 설정해야 합니다
즉 firstscreen이라는 경로가 시작 화면이라는 것입니다
이 안에 들어가는 것은 나중에 중요합니다 왜냐하면 기본적으로 이 firstscreen경로 안에서
지금 한 것처럼 FirstScreen 컴포저블을 사용해야 하기 때문입니다
좋습니다
그러므로 이 FirstScreen을 사용하고 있습니다
이제
이 FirstScsreen을 생성하고 navController로 이동하고 싶은데
name을 받고 나면 두 번째 화면으로 name과 함께 보내질 것입니다
보내기 위해서는 슬래시 기호와 $name을, 넘기고 싶은 매개 변수의 이름을 사용해야 합니다
그러면 이 name은 어디서 얻을까요
FirstScreen을 보면 여기서 얻는 것을 볼 수 있습니다
즉 두 번째 화면을 탐색할 때 여기 이 스트링을 사용한다는 뜻입니다
여기 이 name이
이 remember가 코드가 실제 실행될 때 우리가 두 번째
화면으로 이동할 때 사용하는 값입니다
좋습니다
이 곳이 우리가 테두릴 쳐진 텍스트 창에 입력한 텍스트 필드의
값을 보내는 곳입니다
그 name을 받아서 두 번째 화면으로 보냅니다
이제 두 번째 화면이 name을 받을 수 있어야 하므로
이 name이라는 매개 변수를 받고 있습니다
그 것이 여기서 일어나는 것입니다
이 부분을 통해 한 화면에서 다른 화면으로 변수를 옮기고 있고
SecondScreen에서는 호출 될 때 정보를 포함한 name이라는 매개 변수를
받고 있습니다
우리가 받는 이 name이라는 변수는 NavBackStackEntry안에 있습니다
그러므로 그 name을 받아서
argument를 통해 읽어서 새 변수를 만듭니다
여러 인수를 넘길 수 있는데 이는 it: NavBackStackEntry에 들어 있을 것이며
이름으로 인수를 검사하는데
우리가 선택하고 사용하는 이름은 name입니다
좋습니다
즉 우리가 넘긴 키 입니다
그럼 어디로 키를 넘길까요
이 곳으로 넘깁니다
이 키인 name에 아무 것도 없을 경우
no name이라는 기본 값을 사용합니다
경로가 secondscreen인 composable에서 SecondScreen을
설정할 때
로딩이되면 name을 가질 것인데 name을
인수에서 가져와서
넘겨줄 것입니다
그리고 첫 화면으로 돌아갈 수 있는 탐색 능력도 부여할 것입니다
그 것이 이 탐색 줄이 하는 일입니다
실제 name을 두 번째 화면으로 넘기고 있는데 이 name을
화면에 표시할 수 있습니다
좋습니다
이 Welcome이라는 Text 안에서 말입니다
우리는 스트링 변수를 이용했는데
다른 자료형의 변수도 이용할 수 있습니다
이번 강의는 여기까지 입니다
이제 다음 애플리케이션인 레시피 애플리케이션으로 넘어가서 세부 화면과
화면 탐색 기능을 추가할 준비가 된 것 같습니다
그럼 다음 강의에서 뵙도록 하는데
참고로 탐색의 이용을 연습할 예제가 있을 것인데 영상을 보면서
배우는 것 보다는 실제로 적용하면서 더 많이 배울 수 있다고 생각합니다
좋습니다
다음에 뵙겠습니다
연습 잘 하시고 다음 강의에서 뵙겠습니다