ViewModel + Composable 화면 업데이트가 안됨

th.k·2022년 4월 28일
0
@HiltViewModel
class TodoViewModel @Inject constructor(
    private val getTodoListUseCase: GetTodoListUseCase,
    private val addNewTodoUseCase: AddNewTodoUseCase
) : ViewModel() {

    var todoItems = mutableStateListOf<Todo>()
        private set

    init {
    	viewModelScope.launch() {
        	todoItems = getTodoListUseCase.invoke().toMutableStateList()
        }
    }
    
    // 다른 코드들...
}

상황:
ViewModel이 가지는 mutableStateListMainActivity에서 Composable로 넘겨줌.
Composable은 한번 읽은 State에 대해서 값이 변화했을 때 변화를 감지하여 recompose를 진행한다고 배웠음.
근데 init블럭의 코드를 통해 todoItems의 값이 변화되어도 화면은 업데이트 되지 않았음.

이유:
init블럭의 코드는 todoItems가 참조하고 있는 리스트의 값을 바꾼 것이 아니라 아예 새로운 리스트를 참조하게 만들어버렸기 때문에, composable 입장에서 관찰하고 있는 리스트는 변화가 없으니까 업데이트를 안하는게 당연함.

해결:

init {
	viewModelScope.launch {
    	todoItems.addAll(getTodoListUseCase.invoke().toMutableStateList())
	}
}

todoItems에 값을 add 해주니까 화면 업데이트가 너무 잘된다.

이런... 허무한 실수.....

profile
고생끝에롹이온다

0개의 댓글