New Compose Multiplatform components arrived on Composables UICheck it out →


A dialog for displaying a [DatePicker]. Date pickers let people select a date.

Last updated:


dependencies {


fun DatePickerDialog(
    onDismissRequest: () -> Unit,
    confirmButton: @Composable () -> Unit,
    modifier: Modifier = Modifier,
    dismissButton: @Composable (() -> Unit)? = null,
    shape: Shape = DatePickerDefaults.shape,
    tonalElevation: Dp = DatePickerDefaults.TonalElevation,
    colors: DatePickerColors = DatePickerDefaults.colors(),
    properties: DialogProperties = DialogProperties(usePlatformDefaultWidth = false),
    content: @Composable ColumnScope.() -> Unit


onDismissRequestcalled when the user tries to dismiss the Dialog by clicking outside or pressing the back button. This is not called when the dismiss button is clicked.
confirmButtonbutton which is meant to confirm a proposed action, thus resolving what triggered the dialog. The dialog does not set up any events for this button, nor does it control its enablement, so those need to be set up by the caller.
modifierthe [Modifier] to be applied to this dialog's content.
dismissButtonbutton which is meant to dismiss the dialog. The dialog does not set up any events for this button so they need to be set up by the caller.
shapedefines the dialog's surface shape as well its shadow
tonalElevationwhen [DatePickerColors.containerColor] is [ColorScheme.surface], a higher the elevation will result in a darker color in light theme and lighter color in dark theme
colors[DatePickerColors] that will be used to resolve the colors used for this date picker in different states. See [DatePickerDefaults.colors].
propertiestypically platform specific properties to further configure the dialog
contentthe content of the dialog (i.e. a [DatePicker], for example)

Code Example


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 }
            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 = {
                    onClick = {
                        openDialog.value = false
                        snackScope.launch {
                                "Selected date timestamp: ${datePickerState.selectedDateMillis}"
                    enabled = confirmEnabled.value
                ) {
            dismissButton = {
                TextButton(onClick = { openDialog.value = false }) { Text("Cancel") }
        ) {
            DatePicker(state = datePickerState)