timePicker static method

Future<TimeOfDay?> timePicker({
  1. required BuildContext context,
  2. String? title,
  3. TimeOfDay? initialTime,
  4. String? cancelText,
  5. String? confirmText,
  6. required TextEditingController controller,
})

Implementation

static Future<TimeOfDay?> timePicker({
  required BuildContext context,
  String? title,
  TimeOfDay? initialTime,
  String? cancelText,
  String? confirmText,
  required TextEditingController controller,
}) async {
  TimeOfDay? selectedValue;
  TimeOfDay? selectedTime = await showTimePicker(
    initialEntryMode: TimePickerEntryMode.dialOnly,
    context: context,
    initialTime: initialTime ?? TimeOfDay.now(),
    cancelText: cancelText ?? "Cancel",
    confirmText: confirmText ?? "Save",
    helpText: title ?? "Select time",
    builder: (context, Widget? child) {
      return Theme(
        data: Theme.of(context).copyWith(
          timePickerTheme: TimePickerThemeData(
            dialHandColor: Colors.blue,
            hourMinuteTextColor: Colors.blue,
            dayPeriodTextColor: MaterialStateColor.resolveWith((states) =>
                states.contains(MaterialState.selected)
                    ? Colors.white
                    : Colors.black),
            dayPeriodTextStyle: const TextStyle(fontSize: 12),
            helpTextStyle: TextStyle(color: Colors.black),
            entryModeIconColor: Colors.blue,
          ),
          textButtonTheme: TextButtonThemeData(
            style: ButtonStyle(
              foregroundColor: MaterialStateProperty.all<Color>(Colors.blue),
            ),
          ),
        ),
        child: MediaQuery(
          data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
          child: child!,
        ),
      );
    },
  );
  if (selectedTime != null) {
    selectedValue = selectedTime;

    final dateTime =
        DateTime(2022, 1, 1, selectedValue.hour, selectedValue.minute);
    final formattedTime = DateFormat('HH:mm').format(dateTime);
    controller.text = formattedTime;
    print(controller.text);
  }

  return selectedValue;
}