Почему isAnonymous возвращает false при использовании Kotlin? - PullRequest
0 голосов
/ 17 июня 2020

Я использую архитектуру MVVM, чтобы проверить, вошел ли пользователь анонимно. В моем классе репозитория у меня есть это поле:

val isUserAnonymous = FirebaseAuth.getInstance().currentUser?.isAnonymous

В классе ViewModel у меня есть:

val isUserAnonymous = repository.isUserAnonymous

И в своей деятельности я использую что-то вроде этого:

R.id.sign_out_button -> {
    if (mainViewModel.isUserAnonymous!!) {
        Log.d("TAG", "isUserAnonymous: " + isUserAnonymous) //False
    }
}

Сразу после того, как я успешно вошел в систему и нажал кнопку выдачи, isUserAnonymous оценивается как false . Однако, если я использую:

R.id.sign_out_button -> {
    if (FirebaseAuth.getInstance().currentUser!!.isAnonymous) {
        Log.d("TAG", "isUserAnonymous: " + isUserAnonymous) //True
    }
}

isAnonymous оценивается как true . Зачем? Как мне получить значение true, если я использую код в своем классе репозитория?

1 Ответ

2 голосов
/ 17 июня 2020

Вы должны изменить реализацию isUserAnonymous на это:

val isUserAnonymous: Boolean?
    get() = repository.isUserAnonymous // in view model
val isUserAnonymous: Boolean? 
    get() = FirebaseAuth.getInstance().currentUser?.isAnonymous // in repository

Когда вы объявляете метод get() для своих переменных вместо поддержки field возвращаемого значения, вы можете вернуть значение, которое рассчитывается на момент вызова этой переменной.

Это было бы аналогично написанию двух методов вместо переменных:

// in view model
fun isUserAnonymous(): Boolean? { 
    return repository.isUserAnonymous
}

// in repository
fun isUserAnonymous(): Boolean? {
    return FirebaseAuth.getInstance().currentUser?.isAnonymous
}
...