Nthily
05/17/2024, 8:15 AMNthily
05/17/2024, 8:18 AMChannel/SharedFlow
and Collect it on both screens at the same time, but it seems that after navigating to the A screen, the A screen does not collect Error signals
A Screen:
@Composable
fun LoginA(viewModel: XXX = hiltViewModel()) {
val navigateEvent by viewModel.navigateEventFlow.collectAsStateWithLifeCycle(initial = null)
LaunchedEffect(navigateEvent) {
navigateEvent?.let {
when (it) {
is LoginNavigateEvent.LoginException -> {
snackbarState.show(SnackbarType.Error(it.message))
}
else -> Unit
}
}
}
}
B screen:
@Composable
fun LoginB(viewModel: XXX = hiltViewModel()) {
val navigateEvent by viewModel.navigateEventFlow.collectAsStateWithLifeCycle(initial = null)
LaunchedEffect(navigateEvent) {
if (navigateEvent is LoginNavigateEvent.LoginException) navController.popBackStack()
}
}
viewModel:
private val navigateEvent = MutableSharedFlow<LoginNavigateEvent>()
val navigateEventFlow = navigateEvent.asSharedFlow()
fun handleError() { navigateEvent.emit(...) }
sealed interface LoginNavigateEvent {
data class LoginException(val message: String) : LoginNavigateEvent
}
Pablichjenkov
05/17/2024, 8:23 PM