Chromia UI provides three picker components for temporal selections: ChromiaDatePicker, ChromiaTimePicker, and ChromiaDateTimePicker.
ChromiaDatePicker
A customizable date picker field.
Basic Usage
import 'package:chromia_ui/chromia_ui.dart';
DateTime? birthDate;
ChromiaDatePicker(
label: 'Birth Date',
selectedDate: birthDate,
onDateSelected: (date) => setState(() => birthDate = date),
)
With Hint Text
ChromiaDatePicker(
label: 'Select Date',
hintText: 'Choose a date',
selectedDate: selectedDate,
onDateSelected: (date) => setState(() => selectedDate = date),
)
With Helper Text
ChromiaDatePicker(
label: 'Event Date',
helperText: 'Select the date for your event',
selectedDate: eventDate,
onDateSelected: (date) => setState(() => eventDate = date),
)
With Date Range Constraints
Limit the selectable date range:
ChromiaDatePicker(
label: 'Appointment',
selectedDate: appointmentDate,
firstDate: DateTime.now(), // Can't select past dates
lastDate: DateTime.now().add(Duration(days: 90)), // Max 90 days ahead
onDateSelected: (date) => setState(() => appointmentDate = date),
)
With Custom Date Format
import 'package:intl/intl.dart';
ChromiaDatePicker(
label: 'Date',
selectedDate: selectedDate,
dateFormat: DateFormat('yyyy-MM-dd'), // Custom format
onDateSelected: (date) => setState(() => selectedDate = date),
)
With Error State
ChromiaDatePicker(
label: 'Required Date',
errorText: selectedDate == null ? 'Please select a date' : null,
selectedDate: selectedDate,
onDateSelected: (date) => setState(() => selectedDate = date),
)
Custom Icon
ChromiaDatePicker(
label: 'Birthday',
prefixIcon: Icons.cake,
selectedDate: birthday,
onDateSelected: (date) => setState(() => birthday = date),
)
Disabled State
ChromiaDatePicker(
label: 'Read-only Date',
selectedDate: DateTime.now(),
enabled: false,
onDateSelected: (date) {},
)
ChromiaDatePicker Parameters
onDateSelected
ValueChanged<DateTime>
required
Called when a date is selected.
Label text displayed above the field.
Hint text when no date is selected.
Helper text displayed below the field.
Error text displayed below the field.
Icon displayed before the date text. Defaults to Icons.calendar_today.
First selectable date. Defaults to 1900.
Last selectable date. Defaults to 2100.
Whether the picker is enabled.
Date format. Defaults to ‘MMM dd, yyyy’.
ChromiaTimePicker
A customizable time picker field.
Basic Usage
TimeOfDay? selectedTime;
ChromiaTimePicker(
label: 'Meeting Time',
selectedTime: selectedTime,
onTimeSelected: (time) => setState(() => selectedTime = time),
)
With 24-Hour Format
ChromiaTimePicker(
label: 'Time',
selectedTime: selectedTime,
use24HourFormat: true,
onTimeSelected: (time) => setState(() => selectedTime = time),
)
With Helper and Error Text
ChromiaTimePicker(
label: 'Alarm Time',
helperText: 'Set your wake-up time',
errorText: isValid ? null : 'Please select a time',
selectedTime: alarmTime,
onTimeSelected: (time) => setState(() => alarmTime = time),
)
Custom Icon
ChromiaTimePicker(
label: 'Start Time',
prefixIcon: Icons.schedule,
selectedTime: startTime,
onTimeSelected: (time) => setState(() => startTime = time),
)
ChromiaTimePicker Parameters
onTimeSelected
ValueChanged<TimeOfDay>
required
Called when a time is selected.
Hint text when no time is selected.
Prefix icon. Defaults to Icons.access_time.
Whether the picker is enabled.
Whether to use 24-hour format.
ChromiaDateTimePicker
A combined date and time picker.
Basic Usage
DateTime? selectedDateTime;
ChromiaDateTimePicker(
label: 'Event Start',
selectedDateTime: selectedDateTime,
onDateTimeSelected: (dateTime) => setState(() => selectedDateTime = dateTime),
)
With Date Range
ChromiaDateTimePicker(
label: 'Appointment',
selectedDateTime: appointmentDateTime,
firstDate: DateTime.now(),
lastDate: DateTime.now().add(Duration(days: 60)),
onDateTimeSelected: (dateTime) => setState(() => appointmentDateTime = dateTime),
)
With Helper Text
ChromiaDateTimePicker(
label: 'Deadline',
helperText: 'Select the deadline for your task',
selectedDateTime: deadline,
onDateTimeSelected: (dateTime) => setState(() => deadline = dateTime),
)
Custom Icon
ChromiaDateTimePicker(
label: 'Schedule',
prefixIcon: Icons.event_available,
selectedDateTime: scheduledTime,
onDateTimeSelected: (dateTime) => setState(() => scheduledTime = dateTime),
)
ChromiaDateTimePicker Parameters
onDateTimeSelected
ValueChanged<DateTime>
required
Called when a date and time is selected.
Currently selected date and time.
Prefix icon. Defaults to Icons.event.
Whether the picker is enabled.
Use Cases
Birthday Selector
DateTime? birthday;
ChromiaDatePicker(
label: 'Date of Birth',
selectedDate: birthday,
lastDate: DateTime.now(), // Can't select future dates
firstDate: DateTime(1900),
prefixIcon: Icons.cake,
helperText: 'Enter your date of birth',
onDateSelected: (date) => setState(() => birthday = date),
)
Event Scheduler
DateTime? eventStart;
ChromiaDateTimePicker(
label: 'Event Start Time',
selectedDateTime: eventStart,
firstDate: DateTime.now(),
lastDate: DateTime.now().add(Duration(days: 365)),
helperText: 'When does your event start?',
onDateTimeSelected: (dateTime) {
setState(() => eventStart = dateTime);
// Schedule event
},
)
Alarm Clock
TimeOfDay? alarmTime;
ChromiaTimePicker(
label: 'Wake Up Time',
selectedTime: alarmTime,
prefixIcon: Icons.alarm,
use24HourFormat: true,
helperText: 'Set your alarm',
onTimeSelected: (time) {
setState(() => alarmTime = time);
// Set alarm
},
)
Date Range Form
DateTime? startDate;
DateTime? endDate;
Column(
children: [
ChromiaDatePicker(
label: 'Start Date',
selectedDate: startDate,
onDateSelected: (date) => setState(() => startDate = date),
),
SizedBox(height: 16),
ChromiaDatePicker(
label: 'End Date',
selectedDate: endDate,
firstDate: startDate ?? DateTime.now(),
errorText: (endDate != null && startDate != null && endDate!.isBefore(startDate!))
? 'End date must be after start date'
: null,
onDateSelected: (date) => setState(() => endDate = date),
),
],
)
Working Hours
TimeOfDay? startTime;
TimeOfDay? endTime;
Column(
children: [
ChromiaTimePicker(
label: 'Work Starts',
selectedTime: startTime,
prefixIcon: Icons.login,
onTimeSelected: (time) => setState(() => startTime = time),
),
SizedBox(height: 16),
ChromiaTimePicker(
label: 'Work Ends',
selectedTime: endTime,
prefixIcon: Icons.logout,
onTimeSelected: (time) => setState(() => endTime = time),
),
],
)