Open3

ComposeでスワイプできるLazyColumnを作成する

quesera2quesera2

ざっくりと最小限のコード

LazyColumn {
    items(listItems, key = { it.id }) {
        val dismissState = rememberDismissState(
            confirmStateChange = {
                // スワイプ時に行いたい処理、falseを返すとスワイプさせない
                true
            }
        )
        SwipeToDismiss(
            state = dismissState,
            modifier = Modifier.animateItemPlacement(),
            background = {
                // 背景部分のComposableを組み立てる
            },
            dismissContent = {
                // 前景部分(スワイプできる箇所)のComposableを組み立てる
            }
        )
    }
}
quesera2quesera2

LazyColumnRecyclerViewDiffUtilを使っていた頃のようなアニメーションを実現したい場合、Modifier.animateItemPlacement()を指定する。

このとき、itemsコンポーサブルにモデルが一意となるキーを返すラムダ式を渡す必要がある。

quesera2quesera2

ただし上だと何かが不足しているのか、一度dismissした列の表示がそのままになってしまう。

そのため、再Composeが発生したときにdissmissStateを初期値に戻すというワークアラウンドが必要でした。(参考:LazyColumn with SwipeToDismiss