What is the correct way to use SwipeToDismiss and LazyColumn in android compose alpha09?
My approach:
LazyColumn(
modifier = Modifier.padding(6.dp),
verticalArrangement = Arrangement.spacedBy(6.dp),
) {
items(items = items) {
TrackedActivityRecord(it.activity, it.record, scaffoldState)
}
}
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun TrackedActivityRecord(
activity: TrackedActivity,
record: TrackedActivityRecord,
scaffoldState: ScaffoldState,
vm: TimelineVM = viewModel()
){
val dismissState = rememberDismissState()
if (dismissState.value != DismissValue.Default){
LaunchedEffect(subject = activity){
val deleted = scaffoldState.snackbarHostState.showSnackbar("Awesome", "do it")
if (deleted == SnackbarResult.Dismissed){
vm.rep.deleteRecordById(activity.id, record.id)
}
dismissState.snapTo(DismissValue.Default)
}
}
SwipeToDismiss(
state = dismissState,
background = {
Box(Modifier.size(20.dp). background(Color.Red))
},
) {
Record(activity = activity, record = record)
}
}
There a is problem when the LazyColumn is recomposed the item on the deleted position is Dismissed - not visible. I hacked it with dismissState.snapTo(DismissValue.Default). But for split of a second you can see the old item visible. If I do not use remember but DismissState I get: java.lang.IllegalArgumentException: Cannot round NaN value. caused by androidx.compose.material.SwipeToDismissKt$SwipeToDismiss$2$1$1$1.invoke-nOcc-ac(SwipeToDismiss.kt:244)