5

I'm struggling with the Jetpack Compose navigation. I'm following the NowInAndroid architecture, but I don't have the correct behaviour. I have 4 destinations in my bottomBar, one of them is a Feed-type one. In this one, it makes a call to Firebase Database to get multiple products. The problem is that everytime I change the destination (e.j -> SearchScreen) and go back to the Feed one, this (Feed) does not get restored and load all the data again. Someone know what is going on?

This is my navigateTo function ->

fun navigateToBottomBarRoute(route: String) {
    val topLevelOptions = navOptions {
        popUpTo(navController.graph.findStartDestination().id) {
            saveState = true
        }
        launchSingleTop = true
        restoreState = true
    }
    when (route) {
        HomeSections.FEED.route -> navController.navigateToFeed(navOptions = topLevelOptions)
        HomeSections.SEARCH.route -> navController.navigateToSearch(navOptions = topLevelOptions)
        else -> {}
    }
}

My Feed Screen ->

@OptIn(ExperimentalLifecycleComposeApi::class)
@Composable
fun Feed(
    onProductClick: (Long, String) -> Unit,
    onNavigateTo: (String) -> Unit,
    modifier: Modifier = Modifier,
    viewModel: FeedViewModel = hiltViewModel()
) {
    val feedUiState: FeedScreenUiState by viewModel.uiState.collectAsStateWithLifecycle()

    val productsCollections = getProductsCollections(feedUiState)

    Feed(
        feedUiState = feedUiState,
        productCollections = productsCollections,
        onProductClick = onProductClick,
        onNavigateTo = onNavigateTo,
        onProductCreate = onProductCreate,
        modifier = modifier,
    )
}

The getProductsCollections function returns a list of ProductCollections

fun getProductsCollections(feedUiState: FeedScreenUiState): List<ProductCollection> {
    val productCollection = ArrayList<ProductCollection>()
    if (feedUiState.processors is FeedUiState.Success) productCollection.add(feedUiState.processors.productCollection)
    if (feedUiState.motherboards is FeedUiState.Success) productCollection.add(feedUiState.motherboards.productCollection)
    /** ........ **/
    return productCollection
}

I already tried to make rememberable the val productsCollections = getProductsCollections(feedUiState) but does not even load the items.

I hope you guys can help me, thanks!!

I already tried to make rememberable the val productsCollections = getProductsCollections(feedUiState) but does not even load the items.

I want to restore the previous state of the FeedScreen and not reload everytime I change the destination in my bottomBar.

victorasou
  • 51
  • 2

0 Answers0