-
Notifications
You must be signed in to change notification settings - Fork 241
/
LoginViewModel.kt
54 lines (45 loc) · 1.69 KB
/
LoginViewModel.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package luyao.wanandroid.ui.login
import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import luyao.mvvm.core.base.BaseViewModel
import luyao.wanandroid.CoroutinesDispatcherProvider
import luyao.wanandroid.model.bean.User
import luyao.wanandroid.model.repository.LoginRepository
/**
* Created by luyao
* on 2019/4/2 16:36
*/
class LoginViewModel(val repository: LoginRepository, val provider: CoroutinesDispatcherProvider) : BaseViewModel() {
val userName = ObservableField<String>("")
val passWord = ObservableField<String>("")
private val _uiState = MutableLiveData<LoginUiState<User>>()
val uiState: LiveData<LoginUiState<User>>
get() = _uiState
private fun isInputValid(userName: String, passWord: String) = userName.isNotBlank() && passWord.isNotBlank()
fun loginDataChanged() {
_uiState.value = LoginUiState(enableLoginButton = isInputValid(userName.get()
?: "", passWord.get() ?: ""))
}
fun login() {
launchOnUI {
// repo 返回的是一个 flow
repository.loginFlow(userName.get() ?: "", passWord.get() ?: "")
.collect {
_uiState.postValue(it)
}
}
}
@ExperimentalCoroutinesApi
fun register() {
launchOnUI {
repository.registerFlow(userName.get() ?: "", passWord.get() ?: "")
.collect {
_uiState.postValue(it)
}
}
}
val verifyInput: (String) -> Unit = { loginDataChanged() }
}