From d274a1e45fee4ead1b7618489126406e0e2d3e1d Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Wed, 27 Mar 2024 09:29:46 +0100 Subject: [PATCH] [FIX] ViewModel basique fonctionnel --- .../java/fr/iut/sciencequest/MainActivity.kt | 4 +- .../ViewModels/ScientifiquesDecouvertsVM.kt | 9 ++- .../buisness/Question/QuestionRequestor.kt | 64 +++++++++---------- .../fr/iut/sciencequest/navigation/NavHost.kt | 3 +- .../scientifiques/ScientifiqueListeScreen.kt | 7 +- 5 files changed, 46 insertions(+), 41 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt index b9642b9..5ed99f9 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt @@ -10,7 +10,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.ui.Modifier 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.navigation.NavHost import fr.iut.sciencequest.stub.StubScientifique1 @@ -19,6 +18,7 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + val vm by viewModels() setContent { ScienceQuestTheme { // A surface container using the 'background' color from the theme @@ -26,7 +26,7 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - NavHost() + NavHost(vm) } } } diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt index 0f7dd9d..dd762ab 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt @@ -3,18 +3,21 @@ package fr.iut.sciencequest.ViewModels import android.util.Log import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.toMutableStateList import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.metier.Scientifique +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class ScientifiquesDecouvertsVM : ViewModel() { - var listeScientifique: MutableList = mutableStateListOf() + var listeScientifique: MutableStateFlow> = MutableStateFlow(ArrayList().toMutableStateList()) // fun getScientifiqueById(id: Int) { // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") @@ -26,8 +29,8 @@ class ScientifiquesDecouvertsVM : ViewModel() { fun getScientifiques(page: Int) { Log.d("ViewModelScientifique","Recup la liste de scientifiques") viewModelScope.launch { - fetchScientifiques(page).collect() { - listeScientifique = it.scientifiques.ToModel().toMutableList(); + fetchScientifiques(page).collect { + listeScientifique.value = it.scientifiques.ToModel().toMutableList() } } } diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt index 3dcbc55..e0c0468 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt @@ -10,36 +10,36 @@ import retrofit2.create import java.lang.IllegalArgumentException fun fetchQuestions(index: Int) { - val serviceClient = createRequestService().create() - Log.d("Requete API","Fetch un scientifique") - serviceClient.getQuestion(index).enqueue( - object: Callback { - override fun onResponse( - call: Call, - response: Response - ) { - // NOTE : il faudrait probablement utiliser une autre exception - // exception personnalisée ? - val data = response.body() ?: - throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide") - // Devrait appeler le ModelView, la méthode onResponse ne renvoit rien - // Pour le moment des print pour vérifier que la requêtre fonctionne - // sans avoir besoin des vues. - for (question in data.questions) { - Log.d("Requete Question", "id question: " + question.id.toString()) - Log.d("Requete Question","Libelle: " + question.question) - Log.d("Requete Question","Reponses: ") - for (reponse in question.reponses) { - Log.d("Requete Question","id: " + reponse.id) - Log.d("Requete Question","Libelle: " + reponse.reponse) - } - } - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e("Requete API","Erreur lors d'une requete api") - throw t - } - } - ) + //val serviceClient = createRequestService().create() + //Log.d("Requete API","Fetch un scientifique") + //serviceClient.getQuestion(index).enqueue( + // object: Callback { + // override fun onResponse( + // call: Call, + // response: Response + // ) { + // // NOTE : il faudrait probablement utiliser une autre exception + // // exception personnalisée ? + // val data = response.body() ?: + // throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide") + // // Devrait appeler le ModelView, la méthode onResponse ne renvoit rien + // // Pour le moment des print pour vérifier que la requêtre fonctionne + // // sans avoir besoin des vues. + // for (question in data.questions) { + // Log.d("Requete Question", "id question: " + question.id.toString()) + // Log.d("Requete Question","Libelle: " + question.question) + // Log.d("Requete Question","Reponses: ") + // for (reponse in question.reponses) { + // Log.d("Requete Question","id: " + reponse.id) + // Log.d("Requete Question","Libelle: " + reponse.reponse) + // } + // } + // } +// + // override fun onFailure(call: Call, t: Throwable) { + // Log.e("Requete API","Erreur lors d'une requete api") + // throw t + // } + // } + //) } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 5478677..65889c6 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -20,9 +20,8 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @Composable -fun NavHost() { +fun NavHost(scientifiquesDecouvertsVM: ScientifiquesDecouvertsVM) { val navController = rememberNavController() - NavHost( modifier = Modifier.fillMaxSize(), navController = navController, diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt index 9136861..45dfaf9 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt @@ -3,6 +3,8 @@ package fr.iut.sciencequest.view.scientifiques import android.util.Log import androidx.compose.material3.Scaffold 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.tooling.preview.Preview import androidx.lifecycle.viewmodel.compose.viewModel @@ -17,12 +19,13 @@ import fr.iut.sciencequest.view.TopBar fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(), goToAccount: () -> Unit, goToHome: () -> Unit) { - Log.d("Vue","je suis la") + val liste by viewModel.listeScientifique.collectAsState() Scaffold( topBar = { TopBar(goToAccount, goToHome, stringResource(id = R.string.sc_decouverts)) }, ) { innerPadding -> - scientifiqueListeContainer(viewModel.getScientifiques(), innerPadding) + viewModel.getScientifiques(1) + scientifiqueListeContainer(liste, innerPadding) } } \ No newline at end of file