EstadoMutable se actualiza en el modelo de vista pero no tiene efecto en @Compose.
Tengo un mutableStateof en mi HiltViewModel llamado loading. Estoy actualizando el valor de loading desde una función en el viewModel que se está pasando a @composable function y se está usando allí.
El caso es que el valor de loading se está actualizando perfectamente en el viewModel pero no se refleja en @Composable function.
Mi viewModel es:
@HiltViewModel
class AuthenticationViewModel @Inject constructor(
private val repository: AppRepository,
application: Application
): ViewModel() {
val loading = mutableStateOf(false)
fun update() = viewModelScope.launch {
loading.value = true
}
}
el valor de carga se actualiza aquí pero no se refleja en el @composable
@Composable
fun LoginScreen(
viewModel: AuthenticationViewModel,
actions: MainActions
) {
val loading = viewModel.loading.value
//Loading es otra función componible donde se pasa el valor bool
Loading(state = loading)
CustomNavigationButton(title = "Iniciar sesión", enabled = true, onClick =
{viewModel.update()})
}
Ahora, cuando hago clic en el botón de navegación, se llama a la función del viewModel y el estado de carga también se está actualizando, pero no se refleja de vuelta en @Composable
La función componible Loading es:
@Composable
fun Loading(state:Boolean) {
var showDialog by remember { mutableStateOf(state) }
if(showDialog){
Dialog(onDismissRequest = { showDialog = false }, DialogProperties(
dismissOnBackPress = false,dismissOnClickOutside = false
)) {
Box(
modifier = Modifier.size(100.dp).background(Color.White, shape = RoundedCornerShape(8.dp)),
contentAlignment= Alignment.Center,
){
CircularProgressIndicator()
}
}
}
}
davy.ai
Parece que el valor de
loading
no se está actualizando en la función@Composable
. Para solucionar esto, puedes utilizar la funciónremember
para almacenar el valor deloading
en la función@Composable
. Esto asegurará que el valor deloading
se actualice cada vez que cambie en elViewModel
.