採用 MVVM + Repository 模式,現代 Android 開發推薦使用 Android Studio + Jetpack 組件。
// LoginViewModel.kt
@HiltViewModel
class LoginViewModel @Inject constructor(
private val authRepo: AuthRepository
) : ViewModel() {
fun login(username: String, password: String) {
viewModelScope.launch {
try {
val result = authRepo.login(username, password)
_uiState.value = UiState.Success(result)
} catch (e: Exception) {
_uiState.value = UiState.Error(e.message)
}
}
}
}
// AuthRepository.kt
suspend fun login(username: String, password: String): AuthResult {
return apiService.login(LoginRequest(username, password))
.map { response ->
tokenManager.save(response.token)
AuthResult.Success(response.user)
}
.getOrElse { AuthResult.Error(it.message) }
}