Open wakaztahir opened 9 months ago
@chRyNaN There's no way to replaceAll
with a single
@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
@wakaztahir Thanks for bringing up the issue. A few things here:
SingleNavigationContext
constructor. The logic for that is encapsulated within the library. When creating a Navigator
, if you do not explicitly provide an initialContext
, then it uses the SingleNavigationContext
.popDestination
function until you reach the bottom of the stack and then push
the new destination. But obviously this is not ideal.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.
@chRyNaN I just want this library to meet my needs, which are
replace
, replaceAll
as seen here https://github.com/adrielcafe/voyager#samplesI 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.
@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.
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)
}
@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