selectStartAndEndTime function

Future<bool?> selectStartAndEndTime(
  1. BuildContext context
)

Implementation

Future<bool?> selectStartAndEndTime(BuildContext context) async {
  TimeOfDay? startTime;
  TimeOfDay? endTime;
  String? timeStart = "";
  String? timeEnd = "";

  bool? timeIsGreater;

  // Selección de la hora de inicio
  await showTimePicker(
    context: context,
    initialTime: startTime ?? TimeOfDay.now(),
    cancelText: "Cancel",
    confirmText: "Ok",
    helpText: 'Select Start Time',
    builder: (_, child) {
      return Theme(
        data: appStore.isDarkMode ? ThemeData.dark() : ThemeData.light(),
        child: child!,
      );
    },
  ).then((time) async {
    if (time != null) {
      startTime = time;
      timeStart = startTime!.format(context).toString();
    }

    if (startTime != null) {
      // Selección de la hora de fin
      await showTimePicker(
        context: context,
        initialTime: endTime ?? TimeOfDay.now(),
        cancelText: "Cancel",
        confirmText: "Ok",
        helpText: 'Select End Time',
        builder: (_, child) {
          return Theme(
            data: appStore.isDarkMode ? ThemeData.dark() : ThemeData.light(),
            child: child!,
          );
        },
      ).then((time) {
        if (time != null) {
          endTime = time;
          timeEnd = endTime!.format(context).toString();

          DateTime currentTime = DateTime.now();

          // Convertimos la hora de inicio a milisegundos
          int startEventTime = DateTime(
                  currentTime.year,
                  currentTime.month,
                  currentTime.day,
                  startTime!.hour,
                  startTime!.minute,
                  currentTime.second,
                  currentTime.millisecond,
                  currentTime.microsecond)
              .millisecondsSinceEpoch;

          // Convertimos la hora de fin a milisegundos
          int endEventTime = DateTime(
                  currentTime.year,
                  currentTime.month,
                  currentTime.day,
                  endTime!.hour,
                  endTime!.minute,
                  currentTime.second,
                  currentTime.millisecond,
                  currentTime.microsecond)
              .millisecondsSinceEpoch;

          // Si la hora de fin es menor o igual a la de inicio, sumamos un día al tiempo de fin
          if (endEventTime <= startEventTime) {
            endEventTime = DateTime(
                    currentTime.year,
                    currentTime.month,
                    currentTime.day + 1, // Sumamos un día
                    endTime!.hour,
                    endTime!.minute,
                    currentTime.second,
                    currentTime.millisecond,
                    currentTime.microsecond)
                .millisecondsSinceEpoch;
          }

          // Verificamos si el tiempo de fin es mayor al de inicio
          if (endEventTime > startEventTime) {
            addEventStore.setEventStartTime(timeStart.validate());
            addEventStore.setEventEndTime(timeEnd.validate());
            timeIsGreater = true;
          } else {
            timeIsGreater = false;
          }
        }
      }).catchError((e) {
        toast(e.toString());
      });
    }
  }).catchError((e) {
    toast(e.toString());
  });

  return timeIsGreater;
}