Open1

[メモ]指定ID位置までauto scrollするコードメモ

izumarthizumarth
@Composable
fun AutoScrollingColumn(targetId: Int?) {
    val scrollState = rememberScrollState()
    val positions = remember { mutableStateMapOf<Int, Int>() } // IDと位置情報をマッピング

    LaunchedEffect(targetId, positions) {
        if (targetId != null) {
            positions[targetId]?.let {
                scrollState.animateScrollTo(it)
            }
        }
    }

    Column(modifier = Modifier.verticalScroll(scrollState)) {
        listOf(1, 2, 3).forEach { id ->
            CustomItem(id = id, targetId = targetId) { updatedId, position ->
                positions[updatedId] = position
            }
        }
        // 他のコンテンツを追加
    }
}

@Composable
fun CustomItem(id: Int, targetId: Int?, onPositioned: (Int, Int) -> Unit) {
    Box(
        modifier = Modifier
            .padding(16.dp)
            .background(Color.Gray)
            .fillMaxWidth()
            .onGloballyPositioned { layoutCoordinates ->
                // このコンポーザブルのスクリーン上のy座標を取得
                val position = layoutCoordinates.positionInParent().y
                onPositioned(id, position.toInt())
            }
    ) {
        Text("Item $id")
    }
}