Alexandru Gheorghe
07/27/2024, 6:17 PMAlex Styl
07/27/2024, 6:33 PMAlexandru Gheorghe
07/27/2024, 6:34 PMChrimaeon
07/27/2024, 6:53 PMChrimaeon
07/27/2024, 7:02 PMTimePickerState to restrict the input, thats only available in the DatePickerState  🤔Chrimaeon
07/27/2024, 8:15 PMsnapshotFlow to indicate “errors”
@Composable
fun DailExample(
    onConfirm: (TimePickerState) -> Unit,
    onDismiss: () -> Unit,
    modifier: Modifier = Modifier,
) {
    val currentTime = Calendar.getInstance()
    val timePickerState =
        rememberTimePickerState(
            initialHour = currentTime[Calendar.HOUR_OF_DAY],
            initialMinute = currentTime[Calendar.MINUTE],
            is24Hour = true,
        )
    var hasError by remember {
        mutableStateOf(false)
    }
    LaunchedEffect(timePickerState) {
        snapshotFlow { timePickerState.hour }
            .combine(snapshotFlow { timePickerState.minute }) { _, _ -> timePickerState }
            .collect { state ->
                Log.v("TimePickerDialog", "${state.hour}:${state.minute}")
                hasError = state.hour > 10
            }
    }
    TimePickerDialog(
        modifier = modifier,
        onDismiss = { onDismiss() },
        onConfirm = { onConfirm(timePickerState) },
    ) {
        val errorText =
            if (hasError) {
                "Error"
            } else {
                ""
            }
        Column {
            TimePicker(
                state = timePickerState,
                colors =
                    TimePickerDefaults.colors(
                        selectorColor = if (hasError) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary,
                    ),
            )
            Text(errorText)
        }
    }
}
@Composable
fun TimePickerDialog(
    modifier: Modifier,
    onDismiss: () -> Unit,
    onConfirm: () -> Unit,
    content: @Composable () -> Unit,
) {
    AlertDialog(
        onDismissRequest = onDismiss,
        dismissButton = {
            TextButton(onClick = { onDismiss() }) {
                Text("Dismiss")
            }
        },
        confirmButton = {
            TextButton(onClick = { onConfirm() }) {
                Text("OK")
            }
        },
        text = { content() },
    )
}