Fetch pokemon
This commit is contained in:
		@@ -66,4 +66,6 @@ dependencies {
 | 
				
			|||||||
    debugImplementation(libs.androidx.ui.test.manifest)
 | 
					    debugImplementation(libs.androidx.ui.test.manifest)
 | 
				
			||||||
    implementation("androidx.navigation:navigation-compose:$nav_version")
 | 
					    implementation("androidx.navigation:navigation-compose:$nav_version")
 | 
				
			||||||
    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
 | 
					    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
 | 
				
			||||||
 | 
					    implementation("com.squareup.retrofit2:retrofit:2.9.0")
 | 
				
			||||||
 | 
					    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    xmlns:tools="http://schemas.android.com/tools">
 | 
					    xmlns:tools="http://schemas.android.com/tools">
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.INTERNET" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <application
 | 
					    <application
 | 
				
			||||||
        android:allowBackup="true"
 | 
					        android:allowBackup="true"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,60 @@
 | 
				
			|||||||
package com.ti.mobpo.ui
 | 
					package com.ti.mobpo.ui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import androidx.lifecycle.ViewModel
 | 
					import androidx.lifecycle.ViewModel
 | 
				
			||||||
 | 
					import com.google.gson.annotations.SerializedName
 | 
				
			||||||
import kotlinx.coroutines.flow.MutableStateFlow
 | 
					import kotlinx.coroutines.flow.MutableStateFlow
 | 
				
			||||||
import kotlinx.coroutines.flow.StateFlow
 | 
					import kotlinx.coroutines.flow.StateFlow
 | 
				
			||||||
import kotlinx.coroutines.flow.asStateFlow
 | 
					import kotlinx.coroutines.flow.asStateFlow
 | 
				
			||||||
 | 
					import retrofit2.Call
 | 
				
			||||||
 | 
					import retrofit2.Retrofit
 | 
				
			||||||
 | 
					import retrofit2.converter.gson.GsonConverterFactory
 | 
				
			||||||
 | 
					import retrofit2.http.GET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Data class to hold Pokemon species information
 | 
				
			||||||
 | 
					data class PokemonSpecies(
 | 
				
			||||||
 | 
					    @SerializedName("name") val name: String,
 | 
				
			||||||
 | 
					    @SerializedName("url") val url: String
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Data class to hold the response from the Pokemon species API
 | 
				
			||||||
 | 
					data class PokemonSpeciesResponse(
 | 
				
			||||||
 | 
					    @SerializedName("results") val results: List<PokemonSpecies>
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface PokeApiService {
 | 
				
			||||||
 | 
					    @GET("pokemon-species/?offset=0&limit=1025")
 | 
				
			||||||
 | 
					    fun getPokemonSpecies(): Call<PokemonSpeciesResponse>
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PokeSearchViewModel : ViewModel() {
 | 
					class PokeSearchViewModel : ViewModel() {
 | 
				
			||||||
 | 
					    private val retrofit = Retrofit.Builder()
 | 
				
			||||||
 | 
					        .baseUrl("https://pokeapi.co/api/v2/")
 | 
				
			||||||
 | 
					        .addConverterFactory(GsonConverterFactory.create())
 | 
				
			||||||
 | 
					        .build()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private val service = retrofit.create(PokeApiService::class.java)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private val _uiState = MutableStateFlow(PokeSearchUiState())
 | 
					    private val _uiState = MutableStateFlow(PokeSearchUiState())
 | 
				
			||||||
    val uiState: StateFlow<PokeSearchUiState> = _uiState.asStateFlow()
 | 
					    val uiState: StateFlow<PokeSearchUiState> = _uiState.asStateFlow()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var pokemonList: List<PokemonSpecies>? = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init {
 | 
				
			||||||
 | 
					        fetchPokemonSpecies()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun fetchPokemonSpecies() {
 | 
				
			||||||
 | 
					        service.getPokemonSpecies().enqueue(object : retrofit2.Callback<PokemonSpeciesResponse> {
 | 
				
			||||||
 | 
					            override fun onResponse(call: Call<PokemonSpeciesResponse>, response: retrofit2.Response<PokemonSpeciesResponse>) {
 | 
				
			||||||
 | 
					                if (response.isSuccessful) {
 | 
				
			||||||
 | 
					                    val speciesResponse = response.body()
 | 
				
			||||||
 | 
					                    pokemonList = speciesResponse?.results
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            override fun onFailure(call: Call<PokemonSpeciesResponse>, t: Throwable) {
 | 
				
			||||||
 | 
					                /*TODO*/
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user