From 6b5eb714a6ab0f715da351608ef7e4fb0a891134 Mon Sep 17 00:00:00 2001 From: TM Date: Wed, 22 May 2024 16:34:28 -0700 Subject: [PATCH] Check errorMessages by id --- .../google/samples/apps/nowinandroid/ui/NiaApp.kt | 4 ++-- .../samples/apps/nowinandroid/ui/NiaAppState.kt | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 078aa18cf..6668b77e8 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -108,13 +108,13 @@ fun NiaApp(appState: NiaAppState, modifier: Modifier = Modifier) { LaunchedEffect(errorMessage) { errorMessage?.let { val snackBarResult = snackbarHostState.showSnackbar( - message = it, + message = it.message, actionLabel = "Continue", duration = Indefinite, ) == ActionPerformed if (snackBarResult) { - appState.clearErrorMessage() + appState.clearErrorMessage(it.id) } } } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index d92eb3905..57e2bef65 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -121,17 +121,22 @@ class NiaAppState( ) private val errorMessages = MutableStateFlow>(emptyList()) - val errorMessage: StateFlow = errorMessages.map { it.filter { it.message.isNotEmpty() && it.message.isNotBlank() }.firstOrNull()?.message }.stateIn( + val errorMessage: StateFlow = errorMessages.map { it.firstOrNull() }.stateIn( scope = coroutineScope, started = SharingStarted.WhileSubscribed(5_000), initialValue = null, ) - fun addErrorMessage(error: String) { - if(error.isNotEmpty() && error.isNotBlank()) errorMessages.update { it + ErrorMessage(error) } + fun addErrorMessage(error: String): String? { + if(error.isNotBlank()) { + val newError = ErrorMessage(error) + errorMessages.update { it + newError } + return newError.id + } + return null } - fun clearErrorMessage() { - errorMessages.update { it.drop(1) } + fun clearErrorMessage(id: String) { + errorMessages.update { it.filter { item -> item.id != id } } } /**