showGlassDatePicker function

Future<DateTime?> showGlassDatePicker({
  1. required BuildContext context,
  2. DateTime? initialDateTime,
  3. GlassDatePickerMode mode = GlassDatePickerMode.date,
  4. GlassDatePickerStyle style = GlassDatePickerStyle.graphical,
  5. DateTime? minimumDate,
  6. DateTime? maximumDate,
  7. int minuteInterval = 1,
  8. bool use24hFormat = false,
  9. Color? tintColor,
  10. String title = 'Select Date',
  11. LiquidGlassSettings? settings,
  12. GlassQuality? quality,
  13. GlassSurfaceStyle surfaceStyle = GlassSurfaceStyle.glass,
})

Imperatively displays a modal liquid glass date/time picker sheet.

surfaceStyle is forwarded to the GlassDatePicker inside the sheet.

Implementation

Future<DateTime?> showGlassDatePicker({
  required BuildContext context,
  DateTime? initialDateTime,
  GlassDatePickerMode mode = GlassDatePickerMode.date,
  GlassDatePickerStyle style = GlassDatePickerStyle.graphical,
  DateTime? minimumDate,
  DateTime? maximumDate,
  int minuteInterval = 1,
  bool use24hFormat = false,
  Color? tintColor,
  String title = 'Select Date',
  LiquidGlassSettings? settings,
  GlassQuality? quality,
  GlassSurfaceStyle surfaceStyle = GlassSurfaceStyle.glass,
}) async {
  DateTime selected = initialDateTime ?? DateTime.now();

  final result = await showCupertinoModalPopup<DateTime>(
    context: context,
    builder: (modalContext) {
      return Container(
        padding: const EdgeInsets.all(16),
        margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 24),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(24),
          color: CupertinoColors.systemBackground.resolveFrom(modalContext),
          border: Border.all(
            color: CupertinoColors.white.withValues(alpha: 0.15),
            width: 0.5,
          ),
          boxShadow: [
            BoxShadow(
              color: CupertinoColors.black.withValues(alpha: 0.35),
              blurRadius: 36,
              offset: const Offset(0, 12),
            ),
          ],
        ),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                CupertinoButton(
                  padding: EdgeInsets.zero,
                  child: const Text('Cancel'),
                  onPressed: () => Navigator.of(modalContext).pop(null),
                ),
                Text(
                  title,
                  style: const TextStyle(
                    fontSize: 17,
                    fontWeight: FontWeight.w600,
                  ),
                ),
                CupertinoButton(
                  padding: EdgeInsets.zero,
                  child: const Text(
                    'Done',
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                  onPressed: () => Navigator.of(modalContext).pop(selected),
                ),
              ],
            ),
            const SizedBox(height: 12),
            GlassDatePicker(
              initialDateTime: selected,
              mode: mode,
              style: style,
              minimumDate: minimumDate,
              maximumDate: maximumDate,
              minuteInterval: minuteInterval,
              use24hFormat: use24hFormat,
              tintColor: tintColor,
              settings: settings,
              quality: quality,
              surfaceStyle: surfaceStyle,
              onDateTimeChanged: (val) {
                selected = val;
              },
            ),
          ],
        ),
      );
    },
  );

  return result;
}