Jetpack Compose SnackBar not showing when switching between fragments using Navigation architecture component

58 Views Asked by At

I am navigating from a fragment to another fragment :

with(findNavController()) {
                navigate(
                    MobileNavigationDirections.actionAskToPairBLEAdapterFragment(
                        selectedCarModel
                    )
                )
            }

In the first fragment I am using Jetpack Compose in order to show a compose snackbar :

snackBarService.showSuccessSnackBar(
                            getAsString(
                                CarPairingSuccess,
                                context.getString(string.pair_success)
                            )
                        )

This is snackBarService :

val snackBarService = remember { SnackbarDelegate() }
    val scaffoldState = rememberScaffoldState()
    snackBarService.apply {
        snackbarHostState = scaffoldState.snackbarHostState
        coroutineScope = rememberCoroutineScope()
    }

    CompositionLocalWrapper(topContentOffset = topContentOffset) {
        Scaffold(scaffoldState = scaffoldState, snackbarHost = {
            SnackbarHost(hostState = it) {
                Snackbar(
                    modifier = Modifier.padding(top = BLOCK.BLOCK_SPACER_L.dp),
                    messageType = snackBarService.messageType,
                    darkTheme = snackBarService.isDarkTheme,
                    headerText = snackBarService.headerText,
                    bodyText = snackBarService.bodyText,
                    placement = SnackbarPlacement.Bottom
                )
            }
        }) { paddingValues ->
            NavHost(
                navController,
                modifier = Modifier.padding(top = paddingValues.calculateTopPadding())
            ) { dest ->
                when (dest) {

                    is ScreenDestination.PairingScreen -> {
                        PairingScreen(
                            contentViewModel = contentViewModel,
                            snackBarService = snackBarService
                        )
                    }
                }
            }
        }
    }

But when it switches between fragment using navigation architecture component, Compose Snackbar not showing. If I put a delay in switching fragment it does show snackbar.

private fun navigateBackWithErrorResult() {
        lifecycleScope.launch {
            delay(2000)
            with(findNavController()) {
                navigateUp()
            }
        }
    }

Is there a better solution than using delay?

0

There are 0 best solutions below