Open3
ComposeでスワイプできるLazyColumnを作成する
ざっくりと最小限のコード
LazyColumn {
items(listItems, key = { it.id }) {
val dismissState = rememberDismissState(
confirmStateChange = {
// スワイプ時に行いたい処理、falseを返すとスワイプさせない
true
}
)
SwipeToDismiss(
state = dismissState,
modifier = Modifier.animateItemPlacement(),
background = {
// 背景部分のComposableを組み立てる
},
dismissContent = {
// 前景部分(スワイプできる箇所)のComposableを組み立てる
}
)
}
}
LazyColumn
でRecyclerView
のDiffUtil
を使っていた頃のようなアニメーションを実現したい場合、Modifier.animateItemPlacement()
を指定する。
このとき、items
コンポーサブルにモデルが一意となるキーを返すラムダ式を渡す必要がある。
ただし上だと何かが不足しているのか、一度dismissした列の表示がそのままになってしまう。
そのため、再Composeが発生したときにdissmissState
を初期値に戻すというワークアラウンドが必要でした。(参考:LazyColumn with SwipeToDismiss)