Guest User

Untitled

a guest
Jul 8th, 2021
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.14 KB | None | 0 0
  1. data class Album(
  2.     val id: Int,
  3.     val name: String
  4. )
  5.  
  6. sealed class TaskState<out T> {
  7.     object Initial : TaskState<Nothing>()
  8.     object Progress : TaskState<Nothing>()
  9.     class Failure(val error: Exception) : TaskState<Exception>()
  10.     class Success<out T>(val result: T) : TaskState<T>()
  11. }
  12.  
  13. class TaskViewModel : ViewModel() {
  14.  
  15.     sealed class AvailableTask<T>() {
  16.         class Move : AvailableTask<Boolean>()
  17.         class NewAlbum : AvailableTask<Album>()
  18.     }
  19.  
  20.     private val moveStateFlow = MutableStateFlow<TaskState<Boolean>>(TaskState.Initial)
  21.     private val newAlbumStateFlow = MutableStateFlow<TaskState<Album>>(TaskState.Initial)
  22.  
  23.  
  24.     fun <T> observeTaskState(
  25.         task: AvailableTask<T>,
  26.         observer: Observer<TaskState<T>>
  27.     ) {
  28.         viewModelScope.launch(viewModelScope.coroutineContext + Job()) {
  29.             val stateFlow = when (task) {
  30.                 is AvailableTask.Move -> moveStateFlow
  31.                 is AvailableTask.NewAlbum -> newAlbumStateFlow
  32.             }
  33.            
  34.             stateFlow.collect {
  35.                 observer.onChanged(it)
  36.             }
  37.         }
  38.     }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment