chRyNaN / navigation

Kotlin multi-platform application navigation library.
Apache License 2.0
43 stars 3 forks source link

[QUESTION] how to clear stack navigating to specific destination #13

Open wakaztahir opened 9 months ago

wakaztahir commented 9 months ago

@chRyNaN

I want to navigate to a destination but have nothing in the back stack, so user can't go back !

I don't know how to do it at version 0.10.0, Maybe it can be done using context (i don't know how) but it would be hard compared to this

basically I would like to do resetTo(destination)

Use case

Account Screen -> User signs out (set initial destination to Sign in Screen) Sign In Screen -> User signs in (set initial destination to Account Screen) Sign Up Screen -> User signs up (set initial destination to Account Screen or Sign in Screen if he's not signed in)

Tries

router.push(SingleNavigationContext<AccountNavigation>(AccountNavigation.Account))

SingleNavigationContext's constructor is internal

wakaztahir commented 9 months ago

@chRyNaN There's no way to replaceAll with a single

wakaztahir commented 9 months ago

@chRyNaN For now I have resolved the issue by creating a enum class that implements NavigationContext

starting with different initial destination, I don't really need multiple contexts, I just need a way to replace the current destination, having a way to replace current context would also be great if that could be done

chRyNaN commented 9 months ago

@wakaztahir Thanks for bringing up the issue. A few things here:

I will try and add this feature in an upcoming release. Unfortunately, I don't have the time to immediately work on this. I'll keep this issue alive until it is implemented. Also, I'm considering moving from a Stack to a Tree approach and removing the NavigationContext concept. Thoughts on that are appreciated.

wakaztahir commented 9 months ago

@chRyNaN I just want this library to meet my needs, which are

I don't use NavigationContext, only had to use for this issue, can't say the same for other people, I also don't really know how Tree data structure would impact this navigation library, I am perfectly fine with Stack navigation API as long as it allows all sorts of operations. For nested navigation I am also perfectly fine creating another navigator. Its your call whether tree data structure should be used or not.

chRyNaN commented 9 months ago

@wakaztahir Yes, a simple, easy to use API is one of the main goals of this library. And that is why I am considering removing the NavigationContext concept altogether as it seems to bring confusion and complexity.

wakaztahir commented 7 months ago

This code snippet causes infinite loop

while(navigator.canPopContext()){
   navigator.popContext()
}

I have these functions currently

@OptIn(ExperimentalNavigationApi::class)
fun <D : NavigationDestination,C : NavigationContext<D>> Navigator<D, C>.replaceAllDestinations(destination : D) {
    while(canPopDestination()) {
        popDestination()
    }
    push(destination)
}

@OptIn(ExperimentalNavigationApi::class)
fun <D : NavigationDestination,C : NavigationContext<D>> Navigator<D, C>.replaceContext(context : C) {
    popContext()
    push(context)
}