Jetpack Compose 导航状态无法恢复

vic*_*sou 5 android kotlin android-jetpack-compose kotlin-stateflow jetpack-compose-navigation

我正在努力使用 Jetpack Compose 导航。我遵循 NowInAndroid 架构,但没有正确的行为。我的底部栏中有 4 个目的地,其中之一是 Feed 类型的目的地。在本例中,它调用 Firebase 数据库来获取多个产品。问题是,每次我更改目标(ej -> SearchScreen)并返回到 Feed 时,该(Feed)都不会恢复并再次加载所有数据。有人知道发生了什么事吗?

这是我的 navigationTo 函数 ->

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 -> {}
    }
}
Run Code Online (Sandbox Code Playgroud)

我的提要屏幕 ->

@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,
    )
}
Run Code Online (Sandbox Code Playgroud)

getProductsCollections 函数返回 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
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过让人记住,val productsCollections = getProductsCollections(feedUiState)但甚至没有加载这些项目。

希望大家能帮帮我,谢谢!!

我已经尝试让 val productsCollections = getProductsCollections(feedUiState) 更容易记住,但甚至没有加载项目。

我想恢复 FeedScreen 之前的状态,而不是每次更改底部栏中的目的地时都重新加载。