AlertDialog

This commit is contained in:
Chocolaterie
2025-01-28 10:10:45 +01:00
parent 4a0be3b9d2
commit cfd0e4e41f
4 changed files with 86 additions and 5 deletions

View File

@@ -1,7 +1,9 @@
package com.example.tpfilrouge.auth
import androidx.compose.material3.AlertDialog
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.tpfilrouge.helpers.AlertDialogHelpers
import com.example.tpfilrouge.helpers.AppDialogHelpers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
@@ -28,14 +30,12 @@ class LoginViewModel : ViewModel() {
// Si connexion ok
if (responseService.code.equals("200")){
// Je notifie que c'est ok
println("Connexion OK")
// Note: J'appel la fonction que j'envoie en parametre de la fonction
onSuccess();
//AlertDialogHelpers.get().show(responseService.message, onClose = { onSuccess() })
AlertDialogHelpers.get().show(responseService.message, onClose = onSuccess)
}
else{
// Erreur
println("Connexion échouée")
AlertDialogHelpers.get().show(responseService.message, onClose = {})
}
}
}

View File

@@ -0,0 +1,75 @@
package com.example.tpfilrouge.helpers
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import kotlinx.coroutines.flow.MutableStateFlow
class AlertDialogHelpers {
companion object {
val instance : AlertDialogHelpers by lazy { AlertDialogHelpers() }
fun get() : AlertDialogHelpers {
return instance;
}
}
// Sert à savoir en temps réel si il faut afficher ou pas la dialog
var alertDialogModelData = MutableStateFlow(AlertDialogModelData());
/**
* Afficher la popup
*/
fun show(message: String, onClose : () -> Unit){
// Forcer le rafraichissement de l'etat
alertDialogModelData.value = alertDialogModelData.value.copy(
isShow = true,
message = message,
onClose = onClose);
}
/**
* Fermer la popup
*/
fun closeDialog() {
// Forcer le rafraichissement de l'etat
alertDialogModelData.value = alertDialogModelData.value.copy(isShow = false);
}
}
@Composable
fun AlertDialog(){
// Je vais ecouter quand la dialog est true ou false
// Donc quand je dois afficher ou pas
val alertDialogModelDataState by AlertDialogHelpers.get().alertDialogModelData.collectAsState();
if (alertDialogModelDataState.isShow) {
Dialog(onDismissRequest = {
// Fermer la popup
AlertDialogHelpers.get().closeDialog();
// Appeler le callback
alertDialogModelDataState.onClose();
}){
Box(modifier = Modifier.background(
color = Color(0xFFFFFFFF),
shape = RoundedCornerShape(30.dp)
)
.padding(20.dp)) {
Text(text = alertDialogModelDataState.message)
}
}
}
}

View File

@@ -0,0 +1,4 @@
package com.example.tpfilrouge.helpers
data class AlertDialogModelData(var isShow : Boolean = false, var message : String = "", var onClose : () -> Unit = {}) {
}

View File

@@ -25,6 +25,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import com.example.tpfilrouge.R
import com.example.tpfilrouge.helpers.AlertDialog
import com.example.tpfilrouge.helpers.ProgressDialog
class AppTheme {
@@ -40,6 +41,7 @@ fun EniPage(content: @Composable () -> Unit){
content()
}
ProgressDialog()
AlertDialog()
}
}
}