From 32662281b34f511d39fe8050422cd5c16317796f Mon Sep 17 00:00:00 2001 From: Joren Date: Mon, 29 Apr 2024 16:08:03 +0200 Subject: [PATCH] Start the view in the nav so that it doesn't refetch every time --- app/src/main/java/com/ti/mobpo/ui/Navigation.kt | 12 +++++++----- .../main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt | 7 ++++--- .../main/java/com/ti/mobpo/ui/screens/PokeSearch.kt | 7 ++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/ti/mobpo/ui/Navigation.kt b/app/src/main/java/com/ti/mobpo/ui/Navigation.kt index b83afa8..af60fa4 100644 --- a/app/src/main/java/com/ti/mobpo/ui/Navigation.kt +++ b/app/src/main/java/com/ti/mobpo/ui/Navigation.kt @@ -27,12 +27,12 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.ti.mobpo.ui.screens.Favourites -import com.ti.mobpo.ui.screens.PokeSearch import com.ti.mobpo.ui.screens.PokeSearchScreen import com.ti.mobpo.ui.screens.Profile @@ -70,6 +70,8 @@ fun Navigation() { val updatedSelectedIndex = items.indexOfFirst { it.route == currentRoute } selectedItemIndex = rememberUpdatedState(updatedSelectedIndex).value + val pokeSearchViewModel: PokeSearchViewModel = viewModel() + Scaffold ( bottomBar = { NavigationBar { @@ -112,9 +114,8 @@ fun Navigation() { exitTransition = { ExitTransition.None }) { - composable( - route = Screen.PokeSearch.route) { - PokeSearch() + composable(route = Screen.PokeSearch.route) { + PokeSearchScreen(pokeSearchViewModel) } composable( route = Screen.Favourites.route) { @@ -136,6 +137,7 @@ fun Navigation() { @Composable fun NavigationPreview() { Surface { - PokeSearchScreen() + val pokeSearchViewModel: PokeSearchViewModel = viewModel() + PokeSearchScreen(pokeSearchViewModel) } } \ No newline at end of file diff --git a/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt b/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt index 9bb19f5..24c1aa5 100644 --- a/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt +++ b/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt @@ -13,6 +13,7 @@ import retrofit2.http.GET import java.io.IOException private const val BASE_URL = "https://pokeapi.co/api/v2/"; +private const val SHOW_LIMIT = 20; data class PokemonSpecies( @SerializedName("name") val name: String, @SerializedName("url") val url: String @@ -49,7 +50,7 @@ class PokeSearchViewModel : ViewModel() { try { val response = service.getPokemonSpecies() _initialPokemonList.value = response.results - _filteredPokemonList.value = response.results + _filteredPokemonList.value = response.results.take(SHOW_LIMIT) } catch (e: IOException) { /*TODO*/ } @@ -60,9 +61,9 @@ class PokeSearchViewModel : ViewModel() { val initialPokemonList = _initialPokemonList.value if (query.isNotBlank() && initialPokemonList != null) { val filteredList = initialPokemonList.filter { it.name.contains(query, ignoreCase = true) } - _filteredPokemonList.value = filteredList + _filteredPokemonList.value = filteredList.take(SHOW_LIMIT); } else { - _filteredPokemonList.value = initialPokemonList + _filteredPokemonList.value = initialPokemonList?.take(SHOW_LIMIT); } } } \ No newline at end of file diff --git a/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt b/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt index e4f4d8e..f7e3a02 100644 --- a/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt +++ b/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt @@ -21,12 +21,12 @@ import com.ti.mobpo.ui.SearchBar import androidx.lifecycle.viewmodel.compose.viewModel @Composable -fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel = viewModel()) { +fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) { PokeSearch(pokeSearchViewModel) } @Composable -fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) { +fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel) { val searchResults by pokeSearchViewModel.pokemonList.collectAsState() Column( @@ -57,5 +57,6 @@ fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) { @Preview(showBackground = true) @Composable fun PokeSearchApp(){ - PokeSearchScreen() + val pokeSearchViewModel: PokeSearchViewModel = viewModel() + PokeSearchScreen(pokeSearchViewModel) } \ No newline at end of file