В чем может быть проблема, что 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


Ответы (0 шт):