DatePickerDialogSample
@Preview
@Composable
fun DatePickerDialogSample() {
// Decoupled snackbar host state from scaffold state for demo purposes.
val snackState = remember { SnackbarHostState() }
val snackScope = rememberCoroutineScope()
SnackbarHost(hostState = snackState, Modifier)
val openDialog = remember { mutableStateOf(true) }
// TODO demo how to read the selected date from the state.
if (openDialog.value) {
val datePickerState = rememberDatePickerState()
val confirmEnabled = remember {
derivedStateOf { datePickerState.selectedDateMillis != null }
}
DatePickerDialog(
onDismissRequest = {
// Dismiss the dialog when the user clicks outside the dialog or on the back
// button. If you want to disable that functionality, simply use an empty
// onDismissRequest.
openDialog.value = false
},
confirmButton = {
TextButton(
onClick = {
openDialog.value = false
snackScope.launch {
snackState.showSnackbar(
"Selected date timestamp: ${datePickerState.selectedDateMillis}"
)
}
},
enabled = confirmEnabled.value,
) {
Text("OK")
}
},
dismissButton = {
TextButton(onClick = { openDialog.value = false }) { Text("Cancel") }
},
) {
// The verticalScroll will allow scrolling to show the entire month in case there is not
// enough horizontal space (for example, when in landscape mode).
// Note that it's still currently recommended to use a DisplayMode.Input at the state in
// those cases.
DatePicker(
state = datePickerState,
modifier = Modifier.verticalScroll(rememberScrollState()),
)
}
}
}