Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Could not find Navigator with name "BottomSheetNavigator". You must call NavController.addNavigator() for each navigation type #532

Closed
sidbamba opened this issue Oct 30, 2023 · 3 comments
Labels
dependency There is an issue that is caused by a dependency we use internally.

Comments

@sidbamba
Copy link

i'm using the following dependency
io.github.raamcosta.compose-destinations:animations-core and
io.github.raamcosta.compose-destinations:core

the code looks something like this

val bottomSheetNavigator = rememberBottomSheetNavigator()
    val navController = rememberNavController().apply {
        this.navigatorProvider += bottomSheetNavigator
    }

ModalBottomSheetLayout(bottomSheetNavigator = bottomSheetNavigator,
        content = {
            NaviPayModalBottomSheetLayout(
                sheetState = bottomSheetState,
                sheetContent = {
                    GenericErrorBottomSheetContent(
                        errorEventState = errorEventState,
                        onErrorCtaClick = onErrorCtaClick
                    )
                }
            ) {
                naviPayActivity.navController = navController
                DestinationsNavHost(
                    startRoute = customerStatusRoute ?: NavGraphs.root.startRoute,
                    navGraph = NavGraphs.root,
                    engine = rememberAnimatedNavHostEngine(rootDefaultAnimations = RootNavGraphDefaultAnimations(
                        enterTransition = {
                            slideIntoContainer(
                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
                                animationSpec = tween(400)
                            )
                        },
                        exitTransition = {
                            slideOutOfContainer(
                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
                                animationSpec = tween(400)
                            )
                        },
                        popEnterTransition = {
                            slideIntoContainer(
                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
                                animationSpec = tween(400)
                            )
                        },
                        popExitTransition = {
                            slideOutOfContainer(
                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
                                animationSpec = tween(400)
                            )
                        }
                    )),
                    navController = naviPayActivity.navController,
                    dependenciesContainerBuilder = {
                        dependency(naviPayActivity)
                        genericErrorCtaHandler.destinationsNavigator = this.destinationsNavigator
                    })
            }
        })    

crash log :
ava.lang.IllegalStateException: Could not find Navigator with name "BottomSheetNavigator". You must call NavController.addNavigator() for each navigation type.
androidx.navigation.NavigatorProvider.getNavigator(NavigatorProvider.kt:67)
androidx.navigation.NavigatorProvider.getNavigator(NavigatorProvider.kt:49)
com.google.accompanist.navigation.material.NavGraphBuilderKt.bottomSheet(NavGraphBuilder.kt:60)
com.ramcosta.composedestinations.spec.DestinationStyleBottomSheetKt.addComposable(DestinationStyleBottomSheet.kt:52)
com.ramcosta.composedestinations.animations.AnimatedNavHostEngineKt$lambda$1.invoke(AnimatedNavHostEngine.kt:58)
com.ramcosta.composedestinations.animations.AnimatedNavHostEngineKt$lambda$1.invoke(AnimatedNavHostEngine.kt:57)
com.ramcosta.composedestinations.spec.DestinationStyleKt.addActivityDestination(DestinationStyle.kt:220)
com.ramcosta.composedestinations.DefaultNavHostEngine.composable(DefaultNavHostEngine.kt:123)
com.ramcosta.composedestinations.DestinationsNavHostKt.addNavGraphDestinations(DestinationsNavHost.kt:115)
com.ramcosta.composedestinations.DestinationsNavHostKt.access$addNavGraphDestinations(DestinationsNavHost.kt:1)
com.ramcosta.composedestinations.DestinationsNavHostKt$DestinationsNavHost$2.invoke(DestinationsNavHost.kt:77)
com.ramcosta.composedestinations.DestinationsNavHostKt$DestinationsNavHost$2.invoke(DestinationsNavHost.kt:71)
androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:395)
com.ramcosta.composedestinations.DefaultNavHostEngine.NavHost(DefaultNavHostEngine.kt:79)
com.ramcosta.composedestinations.DestinationsNavHostKt.DestinationsNavHost(DestinationsNavHost.kt:71)
com.navi.pay.onboarding.binding.ui.NaviPayOnboardingActivity$onCreate$1$1.invoke(NaviPayOnboardingActivity.kt:35)
com.navi.pay.onboarding.binding.ui.NaviPayOnboardingActivity$onCreate$1$1.invoke(NaviPayOnboardingActivity.kt:34)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.material.MaterialTheme_androidKt.PlatformMaterialTheme(MaterialTheme.android.kt:23)
androidx.compose.material.MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:82)
androidx.compose.material.MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:81)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:396)
androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:81)
androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:80)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
androidx.compose.material.MaterialThemeKt.MaterialTheme(MaterialTheme.kt:72)
com.navi.pay.common.theme.NaviPayThemeKt.NaviPayMaterialTheme(NaviPayTheme.kt:38)
com.navi.pay.onboarding.binding.ui.NaviPayOnboardingActivity$onCreate$1.invoke(NaviPayOnboardingActivity.kt:34)
com.navi.pay.onboarding.binding.ui.NaviPayOnboardingActivity$onCreate$1.invoke(NaviPayOnboardingActivity.kt:33)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:428)
androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:252)
androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:251)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:195)
androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:119)
androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:118)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:110)
androidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.android.kt:158)
androidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.android.kt:157)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:157)
androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:142)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
androidx.compose.runtime.ActualJvm_jvmKt.invokeComposable(ActualJvm.jvm.kt:78)
androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3340)
androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:3273)
androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:588)
androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1013)
androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:520)
androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:142)
androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:133)
androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:1191)
androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:133)
androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:183)
androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:314)
androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.kt:192)
androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:140)
androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:133)
androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:1266)
android.view.View.dispatchAttachedToWindow(View.java:21092)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3501)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3508)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3508)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3508)
android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3508)
... 18 more

@UKMIITB
Copy link

UKMIITB commented Nov 6, 2023

@raamcosta
Can you please help here

@raamcosta raamcosta added the dependency There is an issue that is caused by a dependency we use internally. label Jan 3, 2024
@raamcosta
Copy link
Owner

I'm not sure what it could be but we have plenty of bottom sheet usage examples in samples working fine.
I would look at NavController instances and make sure that the one you're adding the bottomSheetNavigator too is the same that gets sent to DestinationsNavHost.

I'm closing as I don't think we have an issue and I don't know how else to help here, but let me know if you still feel this is something this library is responsible for.

@yoobi
Copy link

yoobi commented Jun 19, 2024

Hello,

I just got the same issue, I have logged the navController.navigatorProvider.navigators and the bottomSheet is correctly added but I still got the error
When creating

val sheetState = rememberModalBottomSheetState(
    initialValue = Hidden,
    skipHalfExpanded = false,
    confirmValueChange = {
        currentDestinationState.value.isDrawerPersistent().not()
    }
)
val bottomSheetNavigator = remember { BottomSheetNavigator(sheetState) }
navController.navigatorProvider.addNavigator(bottomSheetNavigator)
Timber.d("createEngine navigation: $navController -- ${navController.navigatorProvider.navigators}")
createEngine navigation: androidx.navigation.NavHostController@fe6f91d -- {navigation=androidx.navigation.compose.ComposeNavGraphNavigator@ead1792, activity=androidx.navigation.ActivityNavigator@9cdb563, composable=androidx.navigation.compose.ComposeNavigator@76c9560, dialog=androidx.navigation.compose.DialogNavigator@6ff0a19, animatedComposable=com.google.accompanist.navigation.animation.AnimatedComposeNavigator@8011ade, bottomSheet=androidx.compose.material.navigation.BottomSheetNavigator@45c44bf}

And when called

Timber.d("navigation: $navController -- ${navController.navigatorProvider.navigators}")
DestinationsNavHost(
    dependenciesContainerBuilder = provideViewModelDependencies(navController),
    engine = engine,
    navController = navController,
    navGraph = NavGraphs.root,
    startRoute = startRoute
)
navigation: androidx.navigation.NavHostController@fe6f91d -- {navigation=androidx.navigation.compose.ComposeNavGraphNavigator@ead1792, activity=androidx.navigation.ActivityNavigator@9cdb563, composable=androidx.navigation.compose.ComposeNavigator@76c9560, dialog=androidx.navigation.compose.DialogNavigator@6ff0a19, animatedComposable=com.google.accompanist.navigation.animation.AnimatedComposeNavigator@8011ade, bottomSheet=androidx.compose.material.navigation.BottomSheetNavigator@45c44bf}

EDIT: I think I found why, I'm in the process of upgrading my compose version and compose-destinations was still an old version using accompanist.navigation instead of material.navigation

EDIT2: Even thought I have updated to 1.10.2 I'm still getting this crash.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependency There is an issue that is caused by a dependency we use internally.
Projects
None yet
Development

No branches or pull requests

4 participants