selectTime static method

void selectTime({
  1. required BuildContext context,
  2. required TextEditingController controller,
  3. String? hintText,
  4. void onTimeSelected(
    1. TimeOfDay? time
    )?,
})

Implementation

static void selectTime(
    {required BuildContext context,
    required TextEditingController controller,
    String? hintText,
    void Function(TimeOfDay? time)? onTimeSelected}) async {
  try {
    // Parse the current time from the controller
    final initialTime = Utils().parseTime(controller.text) ?? TimeOfDay.now();

    // Show time picker
    final pickedTime = await showTimePicker(
      helpText: hintText ?? StringConst.SELECT_TIME_MESSAGE,
      context: context,
      initialTime: initialTime,
      initialEntryMode: TimePickerEntryMode.dial,
      builder: (BuildContext context, Widget? child) {
        return Theme(
          data: Theme.of(context).copyWith(
            textTheme: const TextTheme(
              titleLarge: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              bodyLarge: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              bodySmall: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              labelLarge: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              bodyMedium: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              displayLarge: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              displayMedium: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              displaySmall: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              headlineLarge: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              headlineMedium: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              headlineSmall: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              labelMedium: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              labelSmall: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD),
              titleMedium: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
              titleSmall: TextStyle(fontFamily: FONT_STYLE_QUICK_BOLD, color: Colors.black),
            ),
            colorScheme: const ColorScheme.light(
              primary: Colors.deepPurple,
              onPrimary: Colors.white,
              onSurface: Colors.black,
            ),
            dialogBackgroundColor: Colors.white,
            textButtonTheme: TextButtonThemeData(
              style: TextButton.styleFrom(
                foregroundColor: Colors.deepPurple,
              ),
            ),
          ),
          child: Directionality(
            textDirection: TextDirection.ltr,
            child: MediaQuery(
              data: MediaQuery.of(context).copyWith(
                alwaysUse24HourFormat: false,
              ),
              child: child!,
            ),
          ),
        );
      },
    );

    if (pickedTime != null) {
      controller.text = Utils().getFormattedTime(pickedTime);
      if (onTimeSelected != null) {
        onTimeSelected(pickedTime);
      }
    }
  } catch (e) {
    // Fallback to current time if parsing fails
    controller.text = Utils().getFormattedTime(TimeOfDay.now());
  }
}