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 之前的状态,而不是每次更改底部栏中的目的地时都重新加载。
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |