В чем может быть проблема, что LiveData не возвращает результат?
В целом достаточно простое View у меня 2 поля одно с email другое с номером телефона. Мне нужно сделать валидацию одного и другого и если все в порядке то разблокировать кнопку на экране. Вот такой код у меня
@HiltViewModel
class CreateAccountEnterEmailViewModel @Inject constructor(
appData: AppData,
) : ViewModel() {
private var email by mutableStateOf("")
private var phoneNumber by mutableStateOf("")
private var _isPhoneNumberFieldVisibleState: MutableStateFlow<Boolean> = MutableStateFlow(appData.isPhoneNumberRequiredForRegistrationParam.orDef())
val isPhoneNumberFieldVisible: LiveData<Boolean> = _isPhoneNumberFieldVisibleState.asLiveData()
class PairMediatorLiveData<F, S>(firstLiveData: LiveData<F>, secondLiveData: LiveData<S>) : MediatorLiveData<Pair<F?, S?>>() {
init {
addSource(firstLiveData) { firstLiveDataValue: F -> value = firstLiveDataValue to secondLiveData.value }
addSource(secondLiveData) { secondLiveDataValue: S -> value = firstLiveData.value to secondLiveDataValue }
}
}
private val isEmailValid: LiveData<Boolean> =
snapshotFlow { email }
.map { validateEmail(email = it) }
.asLiveData()
private val isPhoneValid: LiveData<Boolean> =
snapshotFlow { phoneNumber }
.map { validatePhone(phone = it) }
.asLiveData()
val isContinueBtnEnabled: LiveData<Boolean> = PairMediatorLiveData(isEmailValid, isPhoneValid)
.switchMap {
return@switchMap liveData {
emit(it.first ?: false && it.second ?: false)
}
}
fun updateEmail(email: String) {
this.email = email
}
fun updatePhoneNumber(phoneNumber: String) {
this.phoneNumber = phoneNumber
}
То есть идея такая юзер делает update на email или phoneNumber этот апдейт подхватывается медиатором который выдает нужный стейт в зависимости от того пройдена валидация или нет.
Но почему то я вижу, что ничего не идет дальше чем вызов updateEmail
или updatePhoneNumber
метода. Что делаю не так?
P.S. Естественно есть подписка в view на isContinueBtnEnabled