[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.viewModels.uixStates.KahootUIState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
class KahootViewModel(
val questionRepo: IQuestionRepository
): ViewModel() {
var uiState = MutableStateFlow(KahootUIState())
private val _uiState = MutableStateFlow(KahootUIState())
val uiState = _uiState.asStateFlow()
private val handler = Handler(Looper.getMainLooper())
@ -28,7 +31,7 @@ class KahootViewModel(
handler.postDelayed(
{
Log.d("KahootViewModel", "J'actualise les questions")
uiState.value = KahootUIState(
_uiState.value = KahootUIState(
question,
duréePartie = uiState.value.duréePartie,
nbPoints = uiState.value.nbPoints,
@ -50,7 +53,7 @@ class KahootViewModel(
return
}
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,
nbPoints = uiState.value.nbPoints + nbPoints,
reponseChoisie = true)

@ -3,15 +3,17 @@ package fr.iut.sciencequest.viewModels
import androidx.lifecycle.ViewModel
import fr.iut.sciencequest.viewModels.uiStates.LoginUIState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
class LoginViewModel: ViewModel() {
var uiState = MutableStateFlow(LoginUIState())
private val _uiState = MutableStateFlow(LoginUIState())
val uiState = _uiState.asStateFlow()
fun setPseudo(pseudo: String) {
uiState.value = LoginUIState(pseudo, uiState.value.mdp)
_uiState.value = LoginUIState(pseudo, uiState.value.mdp)
}
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
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
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.ScientifiqueAPIRepository
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
class PenduViewModel(
val scientifiqueRepo: IScientifiqueRepository
) : ViewModel() {
var uiState = MutableStateFlow(PenduUIState())
private val _uiState = MutableStateFlow(PenduUIState())
val uiState = _uiState.asStateFlow()
fun InitPartie() {
viewModelScope.launch {
@ -27,7 +28,7 @@ class PenduViewModel(
} else {
'_'
}
uiState.value = PenduUIState(
_uiState.value = PenduUIState(
isActionGood = true,
motATrouver = nomComplet,
motATrou = motATrou
@ -40,40 +41,40 @@ class PenduViewModel(
// motAct : état actuel du mot trouvé par l'utilisateur
fun PlayAction(lettre: Char) {
val lowerCaseLetter = lettre.lowercaseChar()
if (lettre == ' ' || uiState.value.lettresUtilises.contains(lowerCaseLetter)) {
uiState.value = PenduUIState(false,
if (lettre == ' ' || _uiState.value.lettresUtilises.contains(lowerCaseLetter)) {
_uiState.value = PenduUIState(false,
false,
uiState.value.nbViesRestantes,
uiState.value.motATrouver,
uiState.value.motATrou,
uiState.value.lettresUtilises
_uiState.value.nbViesRestantes,
_uiState.value.motATrouver,
_uiState.value.motATrou,
_uiState.value.lettresUtilises
)
return
} else if (uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) {
var nvMotATrou = uiState.value.motATrou
for (index in uiState.value.motATrouver.indices) {
val letterToCheck = uiState.value.motATrouver[index]
} else if (_uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) {
var nvMotATrou = _uiState.value.motATrou
for (index in _uiState.value.motATrouver.indices) {
val letterToCheck = _uiState.value.motATrouver[index]
if (letterToCheck.lowercaseChar() == lowerCaseLetter) {
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,
uiState.value.nbViesRestantes,
uiState.value.motATrouver,
_uiState.value.nbViesRestantes,
_uiState.value.motATrouver,
nvMotATrou,
uiState.value.lettresUtilises.plus(lowerCaseLetter)
_uiState.value.lettresUtilises.plus(lowerCaseLetter)
)
} else {
uiState.value = PenduUIState(false,
_uiState.value = PenduUIState(false,
true,
uiState.value.nbViesRestantes - 1,
uiState.value.motATrouver,
uiState.value.motATrou,
uiState.value.lettresUtilises.plus(lowerCaseLetter)
_uiState.value.nbViesRestantes - 1,
_uiState.value.motATrouver,
_uiState.value.motATrou,
_uiState.value.lettresUtilises.plus(lowerCaseLetter)
)
}
}

Loading…
Cancel
Save