[FIX] ViewModel basique fonctionnel

RepositoryAndroid
Renaud BEURET 1 year ago
parent de65dca150
commit d274a1e45f

@ -10,7 +10,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM
import fr.iut.sciencequest.model.buisness.fetchScientifiqueById
import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.dto.extensions.ToModel
import fr.iut.sciencequest.navigation.NavHost import fr.iut.sciencequest.navigation.NavHost
import fr.iut.sciencequest.stub.StubScientifique1 import fr.iut.sciencequest.stub.StubScientifique1
@ -19,6 +18,7 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val vm by viewModels<ScientifiquesDecouvertsVM>()
setContent { setContent {
ScienceQuestTheme { ScienceQuestTheme {
// A surface container using the 'background' color from the theme // A surface container using the 'background' color from the theme
@ -26,7 +26,7 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background color = MaterialTheme.colorScheme.background
) { ) {
NavHost() NavHost(vm)
} }
} }
} }

@ -3,18 +3,21 @@ package fr.iut.sciencequest.ViewModels
import android.util.Log import android.util.Log
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.toMutableStateList
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById
import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques
import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.dto.extensions.ToModel
import fr.iut.sciencequest.model.metier.Scientifique import fr.iut.sciencequest.model.metier.Scientifique
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class ScientifiquesDecouvertsVM : ViewModel() { class ScientifiquesDecouvertsVM : ViewModel() {
var listeScientifique: MutableList<Scientifique> = mutableStateListOf() var listeScientifique: MutableStateFlow<MutableList<Scientifique>> = MutableStateFlow(ArrayList<Scientifique>().toMutableStateList())
// fun getScientifiqueById(id: Int) { // fun getScientifiqueById(id: Int) {
// Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id")
@ -26,8 +29,8 @@ class ScientifiquesDecouvertsVM : ViewModel() {
fun getScientifiques(page: Int) { fun getScientifiques(page: Int) {
Log.d("ViewModelScientifique","Recup la liste de scientifiques") Log.d("ViewModelScientifique","Recup la liste de scientifiques")
viewModelScope.launch { viewModelScope.launch {
fetchScientifiques(page).collect() { fetchScientifiques(page).collect {
listeScientifique = it.scientifiques.ToModel().toMutableList(); listeScientifique.value = it.scientifiques.ToModel().toMutableList()
} }
} }
} }

@ -10,36 +10,36 @@ import retrofit2.create
import java.lang.IllegalArgumentException import java.lang.IllegalArgumentException
fun fetchQuestions(index: Int) { fun fetchQuestions(index: Int) {
val serviceClient = createRequestService().create<QuestionRequestService>() //val serviceClient = createRequestService().create<QuestionRequestService>()
Log.d("Requete API","Fetch un scientifique") //Log.d("Requete API","Fetch un scientifique")
serviceClient.getQuestion(index).enqueue( //serviceClient.getQuestion(index).enqueue(
object: Callback<QuestionListDTO> { // object: Callback<QuestionListDTO> {
override fun onResponse( // override fun onResponse(
call: Call<QuestionListDTO>, // call: Call<QuestionListDTO>,
response: Response<QuestionListDTO> // response: Response<QuestionListDTO>
) { // ) {
// NOTE : il faudrait probablement utiliser une autre exception // // NOTE : il faudrait probablement utiliser une autre exception
// exception personnalisée ? // // exception personnalisée ?
val data = response.body() ?: // val data = response.body() ?:
throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide") // throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide")
// Devrait appeler le ModelView, la méthode onResponse ne renvoit rien // // Devrait appeler le ModelView, la méthode onResponse ne renvoit rien
// Pour le moment des print pour vérifier que la requêtre fonctionne // // Pour le moment des print pour vérifier que la requêtre fonctionne
// sans avoir besoin des vues. // // sans avoir besoin des vues.
for (question in data.questions) { // for (question in data.questions) {
Log.d("Requete Question", "id question: " + question.id.toString()) // Log.d("Requete Question", "id question: " + question.id.toString())
Log.d("Requete Question","Libelle: " + question.question) // Log.d("Requete Question","Libelle: " + question.question)
Log.d("Requete Question","Reponses: ") // Log.d("Requete Question","Reponses: ")
for (reponse in question.reponses) { // for (reponse in question.reponses) {
Log.d("Requete Question","id: " + reponse.id) // Log.d("Requete Question","id: " + reponse.id)
Log.d("Requete Question","Libelle: " + reponse.reponse) // Log.d("Requete Question","Libelle: " + reponse.reponse)
} // }
} // }
} // }
//
override fun onFailure(call: Call<QuestionListDTO>, t: Throwable) { // override fun onFailure(call: Call<QuestionListDTO>, t: Throwable) {
Log.e("Requete API","Erreur lors d'une requete api") // Log.e("Requete API","Erreur lors d'une requete api")
throw t // throw t
} // }
} // }
) //)
} }

@ -20,9 +20,8 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen
@Composable @Composable
fun NavHost() { fun NavHost(scientifiquesDecouvertsVM: ScientifiquesDecouvertsVM) {
val navController = rememberNavController() val navController = rememberNavController()
NavHost( NavHost(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
navController = navController, navController = navController,

@ -3,6 +3,8 @@ package fr.iut.sciencequest.view.scientifiques
import android.util.Log import android.util.Log
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
@ -17,12 +19,13 @@ import fr.iut.sciencequest.view.TopBar
fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(), fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(),
goToAccount: () -> Unit, goToAccount: () -> Unit,
goToHome: () -> Unit) { goToHome: () -> Unit) {
Log.d("Vue","je suis la") val liste by viewModel.listeScientifique.collectAsState()
Scaffold( Scaffold(
topBar = { topBar = {
TopBar(goToAccount, goToHome, stringResource(id = R.string.sc_decouverts)) TopBar(goToAccount, goToHome, stringResource(id = R.string.sc_decouverts))
}, },
) { innerPadding -> ) { innerPadding ->
scientifiqueListeContainer(viewModel.getScientifiques(), innerPadding) viewModel.getScientifiques(1)
scientifiqueListeContainer(liste, innerPadding)
} }
} }
Loading…
Cancel
Save