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() },
)
}