Marko Novaković
08/08/2023, 11:30 AMSwipeToDismiss
for items of LazyColumn
and I want to let the user know that items are swipeable.
items in questions are tasks and when used enters their first task, ever, I want to swipe item programatically and let them know that there is the option.
but I can’t make it work and I don’t understand why.
can anyone help me?
code in thread.Marko Novaković
08/08/2023, 11:30 AM@Composable
private fun Tasks(
state: EditDayState,
deleteTask: (Task) -> Unit,
modifier: Modifier = Modifier,
) {
BoxWithConstraints {
val width = constraints.maxWidth.toFloat()
LazyColumn(
contentPadding = PaddingValues(bottom = 40.dp),
content = {
itemsIndexed(
key = { _, task -> task.id },
items = state.tasks,
itemContent = { index, task ->
val showDismissTutorial by remember(state) {
derivedStateOf { state.isFirstTimeCreatingTask }
}
val currentTask by rememberUpdatedState(task)
val dismissState = rememberDismissState(
confirmStateChange = {
if (it == DismissValue.DismissedToStart)
deleteTask(currentTask)
it == DismissValue.DismissedToStart
}
)
if (showDismissTutorial) {
val infiniteTransition = rememberInfiniteTransition()
val xDelta by infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = width * (DismissThreshold) / 2f,
animationSpec = infiniteRepeatable(
animation = tween(500, delayMillis = 500,),
repeatMode = RepeatMode.Reverse,
)
)
LaunchedEffect(xDelta) {
dismissState.performDrag(xDelta - dismissState.offset.value)
}
}
SwipeToDismiss(
state = dismissState,
dismissThresholds = { FractionalThreshold(DismissThreshold) },
background = { TaskSwipeBackground(dismissState) },
dismissContent = {
Task(
index = index,
task = task,
modifier = modifier,
)
},
directions = setOf(DismissDirection.EndToStart),
modifier = Modifier.animateItemPlacement(),
)
}
)
},
modifier = modifier,
)
}
}