Start the view in the nav so that it doesn't refetch every time
This commit is contained in:
		@@ -27,12 +27,12 @@ import androidx.compose.runtime.saveable.rememberSaveable
 | 
				
			|||||||
import androidx.compose.runtime.setValue
 | 
					import androidx.compose.runtime.setValue
 | 
				
			||||||
import androidx.compose.ui.Modifier
 | 
					import androidx.compose.ui.Modifier
 | 
				
			||||||
import androidx.compose.ui.tooling.preview.Preview
 | 
					import androidx.compose.ui.tooling.preview.Preview
 | 
				
			||||||
 | 
					import androidx.lifecycle.viewmodel.compose.viewModel
 | 
				
			||||||
import androidx.navigation.compose.NavHost
 | 
					import androidx.navigation.compose.NavHost
 | 
				
			||||||
import androidx.navigation.compose.composable
 | 
					import androidx.navigation.compose.composable
 | 
				
			||||||
import androidx.navigation.compose.currentBackStackEntryAsState
 | 
					import androidx.navigation.compose.currentBackStackEntryAsState
 | 
				
			||||||
import androidx.navigation.compose.rememberNavController
 | 
					import androidx.navigation.compose.rememberNavController
 | 
				
			||||||
import com.ti.mobpo.ui.screens.Favourites
 | 
					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.PokeSearchScreen
 | 
				
			||||||
import com.ti.mobpo.ui.screens.Profile
 | 
					import com.ti.mobpo.ui.screens.Profile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -70,6 +70,8 @@ fun Navigation() {
 | 
				
			|||||||
    val updatedSelectedIndex = items.indexOfFirst { it.route == currentRoute }
 | 
					    val updatedSelectedIndex = items.indexOfFirst { it.route == currentRoute }
 | 
				
			||||||
    selectedItemIndex = rememberUpdatedState(updatedSelectedIndex).value
 | 
					    selectedItemIndex = rememberUpdatedState(updatedSelectedIndex).value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Scaffold (
 | 
					    Scaffold (
 | 
				
			||||||
        bottomBar = {
 | 
					        bottomBar = {
 | 
				
			||||||
            NavigationBar {
 | 
					            NavigationBar {
 | 
				
			||||||
@@ -112,9 +114,8 @@ fun Navigation() {
 | 
				
			|||||||
                        exitTransition = {
 | 
					                        exitTransition = {
 | 
				
			||||||
                            ExitTransition.None
 | 
					                            ExitTransition.None
 | 
				
			||||||
                        }) {
 | 
					                        }) {
 | 
				
			||||||
                        composable(
 | 
					                        composable(route = Screen.PokeSearch.route) {
 | 
				
			||||||
                            route = Screen.PokeSearch.route) {
 | 
					                            PokeSearchScreen(pokeSearchViewModel)
 | 
				
			||||||
                            PokeSearch()
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        composable(
 | 
					                        composable(
 | 
				
			||||||
                            route = Screen.Favourites.route) {
 | 
					                            route = Screen.Favourites.route) {
 | 
				
			||||||
@@ -136,6 +137,7 @@ fun Navigation() {
 | 
				
			|||||||
@Composable
 | 
					@Composable
 | 
				
			||||||
fun NavigationPreview() {
 | 
					fun NavigationPreview() {
 | 
				
			||||||
    Surface {
 | 
					    Surface {
 | 
				
			||||||
        PokeSearchScreen()
 | 
					        val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
				
			||||||
 | 
					        PokeSearchScreen(pokeSearchViewModel)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -13,6 +13,7 @@ import retrofit2.http.GET
 | 
				
			|||||||
import java.io.IOException
 | 
					import java.io.IOException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private const val BASE_URL = "https://pokeapi.co/api/v2/";
 | 
					private const val BASE_URL = "https://pokeapi.co/api/v2/";
 | 
				
			||||||
 | 
					private const val SHOW_LIMIT = 20;
 | 
				
			||||||
data class PokemonSpecies(
 | 
					data class PokemonSpecies(
 | 
				
			||||||
    @SerializedName("name") val name: String,
 | 
					    @SerializedName("name") val name: String,
 | 
				
			||||||
    @SerializedName("url") val url: String
 | 
					    @SerializedName("url") val url: String
 | 
				
			||||||
@@ -49,7 +50,7 @@ class PokeSearchViewModel : ViewModel() {
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                val response = service.getPokemonSpecies()
 | 
					                val response = service.getPokemonSpecies()
 | 
				
			||||||
                _initialPokemonList.value = response.results
 | 
					                _initialPokemonList.value = response.results
 | 
				
			||||||
                _filteredPokemonList.value = response.results
 | 
					                _filteredPokemonList.value = response.results.take(SHOW_LIMIT)
 | 
				
			||||||
            } catch (e: IOException) {
 | 
					            } catch (e: IOException) {
 | 
				
			||||||
                /*TODO*/
 | 
					                /*TODO*/
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -60,9 +61,9 @@ class PokeSearchViewModel : ViewModel() {
 | 
				
			|||||||
        val initialPokemonList = _initialPokemonList.value
 | 
					        val initialPokemonList = _initialPokemonList.value
 | 
				
			||||||
        if (query.isNotBlank() && initialPokemonList != null) {
 | 
					        if (query.isNotBlank() && initialPokemonList != null) {
 | 
				
			||||||
            val filteredList = initialPokemonList.filter { it.name.contains(query, ignoreCase = true) }
 | 
					            val filteredList = initialPokemonList.filter { it.name.contains(query, ignoreCase = true) }
 | 
				
			||||||
            _filteredPokemonList.value = filteredList
 | 
					            _filteredPokemonList.value = filteredList.take(SHOW_LIMIT);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            _filteredPokemonList.value = initialPokemonList
 | 
					            _filteredPokemonList.value = initialPokemonList?.take(SHOW_LIMIT);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -21,12 +21,12 @@ import com.ti.mobpo.ui.SearchBar
 | 
				
			|||||||
import androidx.lifecycle.viewmodel.compose.viewModel
 | 
					import androidx.lifecycle.viewmodel.compose.viewModel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Composable
 | 
					@Composable
 | 
				
			||||||
fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
					fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) {
 | 
				
			||||||
    PokeSearch(pokeSearchViewModel)
 | 
					    PokeSearch(pokeSearchViewModel)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Composable
 | 
					@Composable
 | 
				
			||||||
fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
					fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel) {
 | 
				
			||||||
    val searchResults by pokeSearchViewModel.pokemonList.collectAsState()
 | 
					    val searchResults by pokeSearchViewModel.pokemonList.collectAsState()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Column(
 | 
					    Column(
 | 
				
			||||||
@@ -57,5 +57,6 @@ fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
				
			|||||||
@Preview(showBackground = true)
 | 
					@Preview(showBackground = true)
 | 
				
			||||||
@Composable
 | 
					@Composable
 | 
				
			||||||
fun PokeSearchApp(){
 | 
					fun PokeSearchApp(){
 | 
				
			||||||
    PokeSearchScreen()
 | 
					    val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
				
			||||||
 | 
					    PokeSearchScreen(pokeSearchViewModel)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user