Compose Navigation

임찬형·2022년 3월 2일
0

Android Compose

목록 보기
15/16

Compose Navigation

  • 컴포저블 간의 이동을 지원
  1. 필요한 모듈
dependencies {
    def nav_version = "2.4.1"
    implementation("androidx.navigation:navigation-compose:$nav_version")
}
  1. 시작하기
  • NavController: Navigation 구성요소의 중심이고 Stateful하며, 앱의 화면과 각 화면 상태를 구성하는 컴포저블의 백 스택을 추적함.
    val navController = rememberNavController()
  1. NavHost 만들기
  • NavHost: 탐색 그래프와 NavController를 연결함.
  • 경로: Composable을 연결시켜 주는 경로이며 String을 사용하는 암시적 딥 링크. 각 대상에는 고유 경로가 있어야 함

    NavController와 시작 경로를 제공해야 하며, composable(경로) 함수를 통해 탐색 구조에 추가할 수 있다.
  1. 탐색 그래프에서 이동하기
    - navController.navigate(경로) 함수를 사용해 이동 (백 스택 추가)

    +) navigate() 함수는 콜백의 일부로만 호출하는 것이 권장됨.

  2. 인수를 통해 이동하기
    - 딥 링크에 인수를 추가하는 방법과 유사하게 경로에 추가
    - 기본적으로 인수는 String 타입으로 전달되며, 타입 지정 가능

    위 예시에서 profile 경로로 이동 시 userId라는 인수가 String타입으로 전달됨

    위 예시는 userId의 타입을 지정하여 전달하는 예시.
    arguments 매개변수에 navArgument와 type을 전달.

    해당 인수는 composable 함수 람다의 backStackEntry에서 추출.

  • 선택적 인수 추가
    - 쿼리 매개변수 구문 "?argName={argName}" 사용해 포함
    - defaultValue 설정 or nullability = true 설정 필수

    userId 인수를 전달하며, 인수가 전달되지 않은 경우 defaultValue인 "me"가 전달되도록 하는 예시.
  1. 딥 링크
    - navDeepLink() 함수 사용해 딥 링크를 목록으로 추가

    딥 링크를 사용해 특정 URL, 작업 등을 컴포저블과 연결할 수 있음.
    이를 외부에서 사용 가능하도록 하려면 적절한 를 Manifest에 추가해야 함.
<activity >
  	<intent-filter>
    	...
    	<data android:scheme="https" android:host="www.example.com" />
  	</intent-filter>
</activity>  
  1. Nested Navigation
    - navigation() 확장 함수 사용

    여러 navigation() 함수 호출로 인해 그래프 크기가 커질 경우

    위처럼 NavGraphBuilder의 확장 함수를 생성하여 코드를 나누면 효율적

0개의 댓글