Alexander Karkossa
04/25/2021, 10:05 PMAlexander Karkossa
04/25/2021, 10:17 PMclass DemoViewModel: ViewModel() {
private val deletedItems: MutableStateFlow<List<String>> = MutableStateFlow(listOf())
val items = flow<List<String>> {
listOf("Item1", "Item2")
}.combine(deletedItems) { items: List<String>, deletedItems: List<String> ->
items.filter { item ->
val isVisible = deletedItems.firstOrNull { it == item } == null
isVisible
}
}.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(),
listOf()
)
fun isVisible(item: String): Boolean {
return deletedItems.value.firstOrNull { it == item } == null
}
fun refresh(onSyncFinish: () -> Unit) {
viewModelScope.launch {
//Sync repos
onSyncFinish()
}
}
}
@Composable
fun Demo(
viewModel: DemoViewModel
) {
val items by viewModel.items.collectAsState()
var isRefreshing by remember { mutableStateOf(false) }
SwipeRefresh(
state = rememberSwipeRefreshState(isRefreshing = isRefreshing),
onRefresh = {
isRefreshing = true
viewModel.refresh {
isRefreshing = false
}
}
) {
LazyColumn {
items(items) { item ->
if (viewModel.isVisible(item)) {
// This Item is swipeToDismiss.
// swipeToDismiss adds it to viewModel.deletedItems
Text(text = item)
}
}
}
}
}
Alexander Karkossa
04/25/2021, 10:21 PM