31 lines
1.1 KiB
Kotlin
31 lines
1.1 KiB
Kotlin
package top.fatweb.oxygen.toolbox
|
|
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.viewModelScope
|
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
import kotlinx.coroutines.flow.SharingStarted
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
import kotlinx.coroutines.flow.map
|
|
import kotlinx.coroutines.flow.stateIn
|
|
import top.fatweb.oxygen.toolbox.model.UserData
|
|
import top.fatweb.oxygen.toolbox.repository.UserDataRepository
|
|
import javax.inject.Inject
|
|
import kotlin.time.Duration.Companion.seconds
|
|
|
|
@HiltViewModel
|
|
class MainActivityViewModel @Inject constructor(
|
|
userDataRepository: UserDataRepository
|
|
) : ViewModel() {
|
|
val uiState: StateFlow<MainActivityUiState> = userDataRepository.userData.map {
|
|
MainActivityUiState.Success(it)
|
|
}.stateIn(
|
|
scope = viewModelScope,
|
|
initialValue = MainActivityUiState.Loading,
|
|
started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds)
|
|
)
|
|
}
|
|
|
|
sealed interface MainActivityUiState {
|
|
data object Loading : MainActivityUiState
|
|
data class Success(val userData: UserData) : MainActivityUiState
|
|
} |