Skip to content

Instantly share code, notes, and snippets.

@igorescodro
Created December 1, 2020 14:05
Show Gist options
  • Save igorescodro/59c8cbf98c883a40f22bd61384a9e0ca to your computer and use it in GitHub Desktop.
Save igorescodro/59c8cbf98c883a40f22bd61384a9e0ca to your computer and use it in GitHub Desktop.
/**
* Public Composable to do not expose internal ViewModel to other modules.
*/
@Composable
fun TaskListSection(modifier: Modifier = Modifier) {
TaskListLoader(modifier = modifier)
}
/**
* Private Composable to connect the ViewModel and View.
*/
@Composable
private fun TaskListLoader(
viewModel: TaskListViewModel = getViewModel(),
modifier: Modifier = Modifier
) {
viewModel.loadTasks()
val viewState by viewModel.state.collectAsState()
val taskList = viewState.items
TaskListContent(
taskList = taskList,
modifier = modifier,
onCheckedChanged = { item: TaskWithCategory ->
viewModel.updateTaskStatus(item)
}
)
}
/**
* Private "pure" Composable with only UI Components.
*/
@Composable
private fun TaskListContent(
taskList: List<TaskWithCategory>,
modifier: Modifier = Modifier,
onCheckedChanged: (TaskWithCategory) -> Unit
) {
Surface(modifier = modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
Column(modifier = Modifier.padding(start = 8.dp, end = 8.dp)) {
LazyColumnFor(items = taskList) { task ->
TaskItem(task = task, onItemClicked = { }, onCheckedChanged = onCheckedChanged)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment