Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data class Album(
- val id: Int,
- val name: String
- )
- sealed class TaskState<out T> {
- object Initial : TaskState<Nothing>()
- object Progress : TaskState<Nothing>()
- class Failure(val error: Exception) : TaskState<Exception>()
- class Success<out T>(val result: T) : TaskState<T>()
- }
- class TaskViewModel : ViewModel() {
- sealed class AvailableTask<T>() {
- object Move : AvailableTask<Boolean>()
- object NewAlbum : AvailableTask<Album>()
- }
- private val moveStateFlow = MutableStateFlow<TaskState<Boolean>>(TaskState.Initial)
- private val newAlbumStateFlow = MutableStateFlow<TaskState<Album>>(TaskState.Initial)
- fun <T> observeTaskState(
- task: AvailableTask<T>,
- observer: Observer<TaskState<*>>
- ) {
- viewModelScope.launch(viewModelScope.coroutineContext + Job()) {
- val stateFlow = when (task) {
- is AvailableTask.Move -> moveStateFlow
- is AvailableTask.NewAlbum -> newAlbumStateFlow
- }
- stateFlow.collect {
- observer.onChanged(it)
- }
- }
- }
- }
- fun foo() {
- val v = TaskViewModel()
- v.observeTaskState(TaskViewModel.AvailableTask.Move) { taskState: TaskState<*> ->
- when (taskState) {
- TaskState.Initial -> {}
- TaskState.Progress -> {}
- is TaskState.Failure -> {}
- is TaskState.Success -> {
- val result = taskState.result as Boolean
- // ...
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment