前回はFirebaseAuthRepositoryを作成しました。
今回はViewModelを実装していきます。
LoginViewModel
LoginViewModel.kt
class LoginViewModel(
private val loginUsaCase: LoginUsaCaseImpl = LoginUsaCaseImpl(firebaseAuthRepository = FirebaseAuthRepositoryImpl())
): ViewModel() {
private val _uiState = MutableStateFlow(AuthUiState())
val uiState: StateFlow<AuthUiState> = _uiState
// 完了通知
private val _signInCompleted = MutableStateFlow(false)
val signInCompleted: StateFlow<Boolean> = _signInCompleted
// 入力変更
fun onEmailChanged(value: String) {
_uiState.value = _uiState.value.copy(email = value)
}
// 入力変更
fun onPasswordChanged(value: String) {
_uiState.value = _uiState.value.copy(password = value)
}
// 表示変更
fun onShowPasswordChanged() {
_uiState.value = _uiState.value.copy(showPassword = !_uiState.value.showPassword)
}
/**
* サインアップ処理
*/
fun signIn() {
val emailError = Validator.validateEmail(uiState.value.email)
_uiState.value = _uiState.value.copy(
emailError = emailError,
)
if (emailError != null) {
return
}
viewModelScope.launch {
_uiState.value = _uiState.value.copy(isLoading = true)
try {
loginUsaCase.signIn(
uiState.value.email,
uiState.value.password
)
_uiState.value = _uiState.value.copy(
isLoading = false,
generalError = null
)
completeSignIn()
} catch (e: Exception) {
_uiState.value = _uiState.value.copy(
isLoading = false,
generalError = e.message
)
}
}
}
fun completeSignIn() {
_signInCompleted.value = true
}
}
Androidで普段使用するとしたらこのような実装になるかと思います。
ただ、このままではAndroidの機能を使用している為iOSで使用することはできません。
なのでSwiftでも使用できるように変更が必要です。
UsaCaseの実装は特に複雑なことしていない為、省略します。
次回予告
Swiftでも使用できるように実装します。