setPenalty method

Future<void> setPenalty(
  1. String penalty,
  2. bool isEnabled
)

Establece una penalización sobre el tiempo actual.

Este método actualiza el tiempo actual que haya realizado el usuario en función de la penalización seleccionada. Si el usuario marca o desmarca una penalización, el tiempo se actualiza.

Características:

  • Obtiene el tiempo actual de currentTime y se verifica si el tiempo no es nulo.
  • Si la penalización es "+2" y está habilitada, agrega 2 segundos al tiempo actual.
  • Si la penalización es "DNF" y está habilitada, establece el tiempo como "DNF".
  • Si la penalizacion es "none", dehabilita las otras penalizaciones.
  • Si la penalización es desmarcada o es de tipo "none", el tiempo vuelve a su valor original.
  • Finalmente, actualiza el estado con el nuevo tiempo.

Parámetros:

  • penalty (String): Tipo de penalización, puede ser "+2" o "DNF".
  • isEnabled (bool): Indica si la penalización ha sido activada o desactivada.

Implementation

Future<void> setPenalty(String penalty, bool isEnabled) async {
  if (_timeTraining == null) return;

  if (penalty == "+2") {
    if (isEnabled) {
      // SE GUARDA EL TIEMPO ORIGINAL SOLO LA PRIMERA VEZ
      _originalTime ??= _timeTraining!.timeInSeconds;

      isPlusTwoChoose = true;
      // SI ELIGE +2, SE QUITA EL DNF
      isDnfChoose = false;
    } else {
      isPlusTwoChoose = false;
      if (_originalTime != null) {
        _timeTraining = TimeTraining(
          idSession: _timeTraining!.idSession,
          scramble: _timeTraining!.scramble,
          comments: _timeTraining!.comments,
          timeInSeconds: _originalTime!,
          // RESTAURA EL TIEMPO ORIGINAL
          penalty: isDnfChoose ? "DNF" : "",
        );
      }
      // SE RESETEA EL TIEMPO ORIGINAL SOLO DESPUES DE RESTAURARLO
      _originalTime = null;
    }
  } else if (penalty == "DNF") {
    isDnfChoose = isEnabled;
    if (isEnabled) {
      // SI ELIGE DNF, SE QUITA EL +2
      isPlusTwoChoose = false;
    }
  } // SEGUN LA PENALIZACION

  if (penalty == "none") {
    isDnfChoose = false;
    isPlusTwoChoose = false;
    // SE GUARDA EL TIEMPO ORIGINAL SOLO SI AUN NO HA SIDO ASIGNADO
    _originalTime ??= _timeTraining!.timeInSeconds;
  } // SI LA PENALIZACION ES 'none', SE DESACTIVAN LAS OTRAS PENALIZACIONES

  // ACTUALIZAR EL TIEMPO EN EL ESTADO FLOBAL
  _timeTraining = TimeTraining(
    idSession: _timeTraining!.idSession,
    scramble: _timeTraining!.scramble,
    comments: _timeTraining!.comments,
    // SI SE HA SELECCIONADO "+2", SE SUMAN 2 SEGUNDOS AL TIEMPO ORIGINAL.
    // SI NO, SE USA EL TIEMPO ALMACENADO EN `_timeTraining`.
    timeInSeconds: penalty == "none"
        ? _originalTime!
        : (isPlusTwoChoose
            ? (_originalTime! + 2)
            : (_timeTraining!.timeInSeconds)),
    penalty: isDnfChoose ? "DNF" : (isPlusTwoChoose ? "+2" : "none"),
  );

  notifyListeners();
}