[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.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<ScientifiquesDecouvertsVM>()
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)
}
}
}

@ -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<Scientifique> = mutableStateListOf()
var listeScientifique: MutableStateFlow<MutableList<Scientifique>> = MutableStateFlow(ArrayList<Scientifique>().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()
}
}
}

@ -10,36 +10,36 @@ import retrofit2.create
import java.lang.IllegalArgumentException
fun fetchQuestions(index: Int) {
val serviceClient = createRequestService().create<QuestionRequestService>()
Log.d("Requete API","Fetch un scientifique")
serviceClient.getQuestion(index).enqueue(
object: Callback<QuestionListDTO> {
override fun onResponse(
call: Call<QuestionListDTO>,
response: Response<QuestionListDTO>
) {
// 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<QuestionListDTO>, t: Throwable) {
Log.e("Requete API","Erreur lors d'une requete api")
throw t
}
}
)
//val serviceClient = createRequestService().create<QuestionRequestService>()
//Log.d("Requete API","Fetch un scientifique")
//serviceClient.getQuestion(index).enqueue(
// object: Callback<QuestionListDTO> {
// override fun onResponse(
// call: Call<QuestionListDTO>,
// response: Response<QuestionListDTO>
// ) {
// // 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<QuestionListDTO>, t: Throwable) {
// Log.e("Requete API","Erreur lors d'une requete api")
// throw t
// }
// }
//)
}

@ -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,

@ -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)
}
}
Loading…
Cancel
Save