Skip to content

[FEAT] Runtime: NavController.navigateTo 백스택 재구성 및 탐색 API 구현 #16

@angryPodo

Description

@angryPodo

Summary
NavController의 확장 함수 navigateTo(routes: List<Any>)를 구현합니다. 이 함수는 라우트 객체 리스트를 받아, popUpTolaunchSingleTop을 사용하여 현재 백스택을 모두 지우고 새로운 백스택을 구성하여 탐색하는 역할을 합니다.

Motivation
이 함수는 라이브러리의 최종적인 "실행"을 담당하는 핵심 기능입니다. URI가 Wisp.resolveRoutes를 통해 라우트 객체 리스트로 성공적으로 해석된 후, 이 함수가 실제로 화면을 전환하고 사용자에게 결과를 보여줍니다.

Proposed solution

  1. wisp-runtime 모듈에 NavController+Wisp.kt 같은 파일을 생성합니다.
  2. fun NavController.navigateTo(routes: List<Any>) 확장 함수를 구현합니다.
  3. 다음 백스택 재구성 알고리즘에 따라 구현합니다.
    • 입력받은 라우트 리스트가 비어있으면 아무것도 하지 않고 즉시 반환합니다.
    • 첫 번째 라우트로 navigate를 호출하면서, popUpTo(graph.findStartDestination().id) { inclusive = true } 옵션을 사용하여 기존의 모든 스택을 제거합니다. launchSingleTop = true도 함께 적용합니다.
    • routes.drop(1)을 사용하여 나머지 라우트들을 순차적으로 navigate 호출하여 스택에 쌓습니다.
  4. 테스트 전략: 이 기능은 NavController에 대한 의존성이 높아 순수 단위 테스트가 어렵습니다. 따라서 app 모듈에서 이 함수를 실제로 호출하고, androidTest를 통해 UI 상에서 백스택이 올바르게 구성되었는지 검증하는 방식의 테스트가 필요합니다.

Additional context

  • 이슈 종속성: 이 기능은 PR #15에서 구현 중인 Wisp.resolveRoutes에 의해 생성된 라우트 객체 리스트에 의존합니다.

Metadata

Metadata

Assignees

Labels

FEAT✨Add a new feature or change the behavior/policy of an existing feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions