Start the view in the nav so that it doesn't refetch every time
This commit is contained in:
parent
e8881a2921
commit
32662281b3
@ -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)
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user