Advertisement
i_trunker

Untitled

Oct 26th, 2021
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.30 KB | None | 0 0
  1. @Composable
  2. fun ListScreen(viewModel: ListViewModel, navController: NavController) {
  3.     val viewState = viewModel.mState.observeAsState()
  4.     when (val state = viewState.value) {
  5.         is ListViewState.Init -> {
  6.             Column() {
  7.                 repeat(state.list.size) {
  8.                     TextField(value = state.list[it],
  9.                         onValueChange = { str ->
  10.                             viewModel.obtainEvent(ListEvent.NameChange(it,
  11.                                 str))
  12.                         })
  13.                 }
  14.             }
  15.         }
  16.     }
  17. }
  18.  
  19. @HiltViewModel
  20. class ListViewModel @Inject constructor() : ViewModel(), EventHandler<ListEvent> {
  21.     private val m_state: MutableLiveData<ListViewState> =
  22.         MutableLiveData(ListViewState.Init())
  23.     val mState: LiveData<ListViewState> = m_state
  24.  
  25.     override fun obtainEvent(event: ListEvent) {
  26.         when (val state = m_state.value) {
  27.             is ListViewState.Init -> {
  28.                 reduce(state, event)
  29.             }
  30.         }
  31.     }
  32.  
  33.     fun reduce(initState: ListViewState.Init, event: ListEvent) {
  34.         when (event) {
  35.             is ListEvent.NameChange -> {
  36.                 initState.list[event.index] = event.text
  37.                 m_state.postValue(initState)
  38.             }
  39.         }
  40.     }
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement