Код: Выделить всё
@SuppressLint("FlowOperatorInvokedInComposition")
@Composable
fun LoadUsers(loginViewModel: LoginViewModel, isNetworkAvailable: Boolean) {
val state by loginViewModel.users.collectAsState(initial = AllEvents.Nothing)
val textState = remember { mutableStateOf(TextFieldValue("")) }
LaunchedEffect(isNetworkAvailable) {
if (!isNetworkAvailable) {
loginViewModel.users.emit(AllEvents.StringResource(R.string.noInternet))
} else {
loginViewModel.getUsers()
}
}
when (state) {
is AllEvents.Nothing -> {
}
is AllEvents.Loading -> {
ProgressDialog(showDialog = (state as AllEvents.Loading).loading)
}
is AllEvents.Success -> {
UserActivity((state as AllEvents.Success).data as ArrayList, textState)
ProgressDialog(showDialog = false)
}
else -> {
if (state.asString() != stringResource(id = R.string.noInternet) || !isNetworkAvailable)
Toast.makeText(
LocalContext.current,
state.asString().toString(),
Toast.LENGTH_SHORT
).show()
}
}
}
Код: Выделить всё
class LoginViewModel(
private val apiServiceImpl: ApiServiceImpl
) :
ViewModel() {
val users = MutableStateFlow()
fun getUsers() {
viewModelScope.launch {
users.emit(AllEvents.Loading(true))
apiServiceImpl.getUserList(1).either({
users.emit(AllEvents.DynamicError(it))
it
}) {
users.emit(AllEvents.DynamicError("it"))
it
}
}
}
}
Код: Выделить всё
suspend fun getUserList(page: Int): Either {
return try {
Either.Right(apiService.getUsers(page))
} catch (ex: Exception) {
Either.Left(ex.errorMessage() as String)
}
}
Фактическая проблема, с которой я столкнулся, заключается в том, что я показываю всплывающее сообщение при отсутствии подключения к Интернету, а также в том случае, если я получаю результат успеха от API. Теперь, если я получу результат успеха от API, он покажет мне всплывающее сообщение, которое я показал. Когда я отключаю подключение к Интернету, сначала отображается всплывающее сообщение об успехе, а затем отображается отсутствие подключения к Интернету. Это первый сценарий
Второй сценарий
Изначально подключение к Интернету отсутствует и он показывает мне всплывающее сообщение об отсутствии подключения к Интернету, а затем, когда я восстанавливаю подключение к Интернету, он снова показывает мне всплывающее сообщение об отсутствии подключения к Интернету, а также дает мне результат успеха от API. Согласно моим выводам, все это происходит из-за CollectAsState()
Вот ссылка на видео сценария
Подробнее здесь: https://stackoverflow.com/questions/788 ... ck-compose
Мобильная версия