Bradleycorn
12/05/2020, 5:45 PM@Composable
fun HomeScreen(viewModel: MainViewModel, onPostClicked: (Post) -> Unit = {}) {
val updatesComplete by produceState(initialValue = false, subject = viewModel) {
// suspending method that fetches updates from a network api, and updates a room DB.
viewModel.updatePosts()
value = true
}
val postList by remember(viewModel) {
// A Flow of posts from a room DB.
viewModel.recentPosts
}.collectAsState(initial = listOf())
val uiState by derivedStateOf {
when {
postList.isNotEmpty() -> UiState(data = postList)
!updatesComplete -> UiState(loading = true)
else -> UiState(data = postList)
}
}
AppScreen {
when {
uiState.loading -> Box(modifier = Modifier.fillMaxSize()) {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
}
uiState.data!!.isEmpty() -> Text("No Posts Available")
else -> ShowPosts(uiState.data)
}
}
}