Start the view in the nav so that it doesn't refetch every time

This commit is contained in:
Joren 2024-04-29 16:08:03 +02:00
parent e8881a2921
commit 32662281b3
Signed by untrusted user who does not match committer: Joren
GPG Key ID: 280E33DFBC0F1B55
3 changed files with 15 additions and 11 deletions

View File

@ -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)
}
}

View File

@ -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);
}
}
}

View File

@ -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)
}