[FIX] UiStates plus modifiables à l'exterieur des VM

Android
Renaud BEURET 1 year ago
parent be07bd7e07
commit f1cdc05ebb

@ -10,12 +10,15 @@ import fr.iut.sciencequest.model.repositories.question.IQuestionRepository
import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository
import fr.iut.sciencequest.viewModels.uixStates.KahootUIState import fr.iut.sciencequest.viewModels.uixStates.KahootUIState
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class KahootViewModel( class KahootViewModel(
val questionRepo: IQuestionRepository val questionRepo: IQuestionRepository
): ViewModel() { ): ViewModel() {
var uiState = MutableStateFlow(KahootUIState()) private val _uiState = MutableStateFlow(KahootUIState())
val uiState = _uiState.asStateFlow()
private val handler = Handler(Looper.getMainLooper()) private val handler = Handler(Looper.getMainLooper())
@ -28,7 +31,7 @@ class KahootViewModel(
handler.postDelayed( handler.postDelayed(
{ {
Log.d("KahootViewModel", "J'actualise les questions") Log.d("KahootViewModel", "J'actualise les questions")
uiState.value = KahootUIState( _uiState.value = KahootUIState(
question, question,
duréePartie = uiState.value.duréePartie, duréePartie = uiState.value.duréePartie,
nbPoints = uiState.value.nbPoints, nbPoints = uiState.value.nbPoints,
@ -50,7 +53,7 @@ class KahootViewModel(
return return
} }
val nbPoints: Int = (10_000 - tpsReponse).toInt() val nbPoints: Int = (10_000 - tpsReponse).toInt()
uiState.value = KahootUIState(uiState.value.question, _uiState.value = KahootUIState(uiState.value.question,
duréePartie = uiState.value.duréePartie, duréePartie = uiState.value.duréePartie,
nbPoints = uiState.value.nbPoints + nbPoints, nbPoints = uiState.value.nbPoints + nbPoints,
reponseChoisie = true) reponseChoisie = true)

@ -3,15 +3,17 @@ package fr.iut.sciencequest.viewModels
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import fr.iut.sciencequest.viewModels.uiStates.LoginUIState import fr.iut.sciencequest.viewModels.uiStates.LoginUIState
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
class LoginViewModel: ViewModel() { class LoginViewModel: ViewModel() {
var uiState = MutableStateFlow(LoginUIState()) private val _uiState = MutableStateFlow(LoginUIState())
val uiState = _uiState.asStateFlow()
fun setPseudo(pseudo: String) { fun setPseudo(pseudo: String) {
uiState.value = LoginUIState(pseudo, uiState.value.mdp) _uiState.value = LoginUIState(pseudo, uiState.value.mdp)
} }
fun setMdp(mdp: String) { fun setMdp(mdp: String) {
uiState.value = LoginUIState(uiState.value.pseudo, mdp) _uiState.value = LoginUIState(uiState.value.pseudo, mdp)
} }
} }

@ -1,6 +1,5 @@
package fr.iut.sciencequest.viewModels package fr.iut.sciencequest.viewModels
import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
@ -8,12 +7,14 @@ import fr.iut.sciencequest.viewModels.uiStates.PenduUIState
import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository
import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class PenduViewModel( class PenduViewModel(
val scientifiqueRepo: IScientifiqueRepository val scientifiqueRepo: IScientifiqueRepository
) : ViewModel() { ) : ViewModel() {
var uiState = MutableStateFlow(PenduUIState()) private val _uiState = MutableStateFlow(PenduUIState())
val uiState = _uiState.asStateFlow()
fun InitPartie() { fun InitPartie() {
viewModelScope.launch { viewModelScope.launch {
@ -27,7 +28,7 @@ class PenduViewModel(
} else { } else {
'_' '_'
} }
uiState.value = PenduUIState( _uiState.value = PenduUIState(
isActionGood = true, isActionGood = true,
motATrouver = nomComplet, motATrouver = nomComplet,
motATrou = motATrou motATrou = motATrou
@ -40,40 +41,40 @@ class PenduViewModel(
// motAct : état actuel du mot trouvé par l'utilisateur // motAct : état actuel du mot trouvé par l'utilisateur
fun PlayAction(lettre: Char) { fun PlayAction(lettre: Char) {
val lowerCaseLetter = lettre.lowercaseChar() val lowerCaseLetter = lettre.lowercaseChar()
if (lettre == ' ' || uiState.value.lettresUtilises.contains(lowerCaseLetter)) { if (lettre == ' ' || _uiState.value.lettresUtilises.contains(lowerCaseLetter)) {
uiState.value = PenduUIState(false, _uiState.value = PenduUIState(false,
false, false,
uiState.value.nbViesRestantes, _uiState.value.nbViesRestantes,
uiState.value.motATrouver, _uiState.value.motATrouver,
uiState.value.motATrou, _uiState.value.motATrou,
uiState.value.lettresUtilises _uiState.value.lettresUtilises
) )
return return
} else if (uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) { } else if (_uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) {
var nvMotATrou = uiState.value.motATrou var nvMotATrou = _uiState.value.motATrou
for (index in uiState.value.motATrouver.indices) { for (index in _uiState.value.motATrouver.indices) {
val letterToCheck = uiState.value.motATrouver[index] val letterToCheck = _uiState.value.motATrouver[index]
if (letterToCheck.lowercaseChar() == lowerCaseLetter) { if (letterToCheck.lowercaseChar() == lowerCaseLetter) {
nvMotATrou = nvMotATrou.replaceRange(index,index + 1, letterToCheck.toString()) nvMotATrou = nvMotATrou.replaceRange(index,index + 1, letterToCheck.toString())
} }
} }
val isWon = nvMotATrou == uiState.value.motATrouver val isWon = nvMotATrou == _uiState.value.motATrouver
uiState.value = PenduUIState(isWon, _uiState.value = PenduUIState(isWon,
true, true,
uiState.value.nbViesRestantes, _uiState.value.nbViesRestantes,
uiState.value.motATrouver, _uiState.value.motATrouver,
nvMotATrou, nvMotATrou,
uiState.value.lettresUtilises.plus(lowerCaseLetter) _uiState.value.lettresUtilises.plus(lowerCaseLetter)
) )
} else { } else {
uiState.value = PenduUIState(false, _uiState.value = PenduUIState(false,
true, true,
uiState.value.nbViesRestantes - 1, _uiState.value.nbViesRestantes - 1,
uiState.value.motATrouver, _uiState.value.motATrouver,
uiState.value.motATrou, _uiState.value.motATrou,
uiState.value.lettresUtilises.plus(lowerCaseLetter) _uiState.value.lettresUtilises.plus(lowerCaseLetter)
) )
} }
} }

Loading…
Cancel
Save