From be602d5325b2b1df4354c7f863f4179fc4f0fe64 Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Mon, 2 Oct 2023 09:13:25 +0200 Subject: [PATCH] Move the home scrollstate to the main composable to avoid fab annimation. --- .../rplexicon/ui/navigation/HomeNavHost.kt | 9 ++++++--- .../rplexicon/ui/navigation/ScreenNavHost.kt | 7 +++++-- .../ui/navigation/pages/ComposableLexicon.kt | 8 ++++++-- .../ui/navigation/pages/ComposableLocation.kt | 8 ++++++-- .../ui/navigation/pages/ComposableQuestList.kt | 8 ++++++-- .../ui/navigation/screens/ComposableHome.kt | 13 +++++++++++-- .../screens/lexicon/detail/LexiconDetailScreen.kt | 1 + .../ui/screens/lexicon/list/LexiconScreen.kt | 4 ++-- .../ui/screens/location/list/LocationScreen.kt | 4 ++-- .../ui/screens/quest/list/QuestListScreen.kt | 2 +- 10 files changed, 46 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/HomeNavHost.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/HomeNavHost.kt index 3a602a0..c842c3a 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/HomeNavHost.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/HomeNavHost.kt @@ -49,6 +49,9 @@ fun HomeNavHost( navHostController: NavHostController = rememberNavController(), bottomBarItems: List = rememberBottomBarItems(navHostController), startDestination: String = LEXICON_LIST_ROUTE, + lexiconListState: LazyListState, + questListState: LazyListState, + locationListState: LazyListState, ) { CompositionLocalProvider( LocalSnack provides remember { SnackbarHostState() }, @@ -105,9 +108,9 @@ fun HomeNavHost( navController = navHostController, startDestination = startDestination, ) { - composableLexicon() - composableQuests() - composableLocations() + composableLexicon(lazyListState = lexiconListState) + composableQuests(lazyListState = questListState) + composableLocations(lazyListState = locationListState) } } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/ScreenNavHost.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/ScreenNavHost.kt index 6de415d..57d4add 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/ScreenNavHost.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/ScreenNavHost.kt @@ -9,7 +9,6 @@ import androidx.navigation.NavHostController import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController -import com.pixelized.rplexicon.ui.navigation.screens.AUTHENTICATION_ROUTE import com.pixelized.rplexicon.ui.navigation.screens.HOME_ROUTE import com.pixelized.rplexicon.ui.navigation.screens.composableAuthentication import com.pixelized.rplexicon.ui.navigation.screens.composableCharacterSheet @@ -41,7 +40,11 @@ fun ScreenNavHost( startDestination = startDestination, ) { composableAuthentication() - composableHome() + composableHome( + lexiconListState = lexiconListState, + questListState = questListState, + locationListState = locationListState, + ) composableLexiconDetail() composableLexiconSearch() composableQuestDetail() diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLexicon.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLexicon.kt index a7c8a16..14d054b 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLexicon.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLexicon.kt @@ -12,12 +12,16 @@ private const val ROUTE = "lexicon" const val LEXICON_LIST_ROUTE = ROUTE -fun NavGraphBuilder.composableLexicon() { +fun NavGraphBuilder.composableLexicon( + lazyListState: LazyListState, +) { animatedComposable( route = LEXICON_LIST_ROUTE, animation = NavigationAnimation.Fade, ) { - LexiconScreen() + LexiconScreen( + lazyListState = lazyListState + ) } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLocation.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLocation.kt index a3dd713..4d660a2 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLocation.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableLocation.kt @@ -12,12 +12,16 @@ private const val ROUTE = "locations" const val LOCATION_LIST_ROUTE = ROUTE -fun NavGraphBuilder.composableLocations() { +fun NavGraphBuilder.composableLocations( + lazyListState: LazyListState, +) { animatedComposable( route = LOCATION_LIST_ROUTE, animation = NavigationAnimation.Fade, ) { - LocationScreen() + LocationScreen( + lazyListState = lazyListState, + ) } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableQuestList.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableQuestList.kt index bb28be7..39af5e7 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableQuestList.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/pages/ComposableQuestList.kt @@ -12,12 +12,16 @@ private const val ROUTE = "quests" const val QUEST_LIST_ROUTE = ROUTE -fun NavGraphBuilder.composableQuests() { +fun NavGraphBuilder.composableQuests( + lazyListState: LazyListState, +) { animatedComposable( route = QUEST_LIST_ROUTE, animation = NavigationAnimation.Fade, ) { - QuestListScreen() + QuestListScreen( + lazyListState = lazyListState, + ) } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/screens/ComposableHome.kt b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/screens/ComposableHome.kt index e46a59d..c329268 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/navigation/screens/ComposableHome.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/navigation/screens/ComposableHome.kt @@ -1,5 +1,6 @@ package com.pixelized.rplexicon.ui.navigation.screens +import androidx.compose.foundation.lazy.LazyListState import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.NavOptionsBuilder @@ -11,12 +12,20 @@ private const val ROUTE = "home" const val HOME_ROUTE = ROUTE -fun NavGraphBuilder.composableHome() { +fun NavGraphBuilder.composableHome( + lexiconListState: LazyListState, + questListState: LazyListState, + locationListState: LazyListState, +) { animatedComposable( route = HOME_ROUTE, animation = NavigationAnimation.Push, ) { - HomeNavHost() + HomeNavHost( + lexiconListState = lexiconListState, + questListState = questListState, + locationListState = locationListState, + ) } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt index c402f30..3a8d3cb 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn +import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/list/LexiconScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/list/LexiconScreen.kt index 9a2f4db..4f00823 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/list/LexiconScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/list/LexiconScreen.kt @@ -52,11 +52,11 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalMaterialApi::class) @Composable fun LexiconScreen( - viewModel: LexiconViewModel = hiltViewModel() + viewModel: LexiconViewModel = hiltViewModel(), + lazyListState: LazyListState, ) { val scope = rememberCoroutineScope() val screen = LocalScreenNavHost.current - val lazyListState = rememberLazyListState() val refresh = rememberPullRefreshState( refreshing = false, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/list/LocationScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/list/LocationScreen.kt index 6817bf1..6cdc390 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/list/LocationScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/list/LocationScreen.kt @@ -38,10 +38,10 @@ import kotlinx.coroutines.launch @Composable fun LocationScreen( viewModel: LocationViewModel = hiltViewModel(), + lazyListState: LazyListState, ) { - val scope = rememberCoroutineScope() - val lazyListState = rememberLazyListState() val screen = LocalScreenNavHost.current + val scope = rememberCoroutineScope() val refresh = rememberPullRefreshState( refreshing = false, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/list/QuestListScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/list/QuestListScreen.kt index 51db41c..931569e 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/list/QuestListScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/list/QuestListScreen.kt @@ -38,10 +38,10 @@ import kotlinx.coroutines.launch @Composable fun QuestListScreen( viewModel: QuestListViewModel = hiltViewModel(), + lazyListState: LazyListState, ) { val scope = rememberCoroutineScope() val screen = LocalScreenNavHost.current - val lazyListState = rememberLazyListState() val refresh = rememberPullRefreshState( refreshing = false,