showAlertFormAddTime static method

Future<String?> showAlertFormAddTime(
  1. String titleKey,
  2. String addScrambleKey,
  3. String addTimeKey,
  4. String scrambleLabelText,
  5. String timeLabelText,
  6. BuildContext context,
)

Muestra un formulario para agregar un nuevo tiempo y scramble.

Los parámetros titleKey, addScrambleKey y addTimeKey se usan para localizar los textos del título y contenido del diálogo. scrambleLabelText y timeLabelText son los textos que se muestran como etiquetas en los campos de texto para ingresar el scramble y el tiempo.

Implementation

static Future<String?> showAlertFormAddTime(
    String titleKey,
    String addScrambleKey,
    String addTimeKey,
    String scrambleLabelText,
    String timeLabelText,
    BuildContext context) async {
  final TextEditingController controllerScramble = TextEditingController();
  final TextEditingController controllerTime = TextEditingController();
  final cubeTypeDaoSb = CubeTypeDaoSb();
  final sessionDaoSb = SessionDaoSb();
  final userDaoSb = UserDaoSb();

  // OBTENER EL USUARIO ACTUAL
  final currentUser = context.read<CurrentUser>().user;
  // OBTENER EL ID DEL USUARIO
  int idUser = await userDaoSb.getIdUserFromName(currentUser!.username);
  if (idUser == -1) {
    DatabaseHelper.logger.e("Error al obtener el ID del usuario.");
  } // VERIFICAR QUE SI ESTA BIEN EL ID DEL USUARIO

  // BUSCAMOS EL TIPO DE CUBO QUE YA ESTABA ESTABLECIDO
  final tipoCuboEstablecido = context.read<CurrentCubeType>().cubeType;
  final currentSession = context.read<CurrentSession>().session;
  final cubo =
      await cubeTypeDaoSb.getCubeTypeByNameAndIdUser(tipoCuboEstablecido!.cubeName, idUser);

  // BUSCAMOS EL TIPO DE CUBO QUE TIENE ESA SESION
  SessionClass? sessionTipoActual = await sessionDaoSb.getSessionByUserCubeName(
      idUser, currentSession!.sessionName, cubo.idCube);

  // CUANDO SELECCIONE UNA SESION, SE BUSCA EL TIPO DE CUBO DE ESA SESION
  // GUARDAR LOS DATOS DEL TIPO DE CUBO EN EL ESTADO GLOBAL
  final currentCube = Provider.of<CurrentCubeType>(context, listen: false);

  // SE BUSCA ESE TIPO DE CUBO POR ESE ID
  CubeType? cubeType =
      await cubeTypeDaoSb.getCubeById(sessionTipoActual!.idCubeType);
  if (cubeType.idCube != -1) {
    // SE ACTUALIZA EL ESTADO GLOBAL
    currentCube.setCubeType(cubeType);
  } else {
    DatabaseHelper.logger
        .e("No se encontro el tipo de cubo: ${cubeType.toString()}");
  } // SE VERIFICA QUE SE HA RETORNADO EL TIPO DE CUBO CORRECTAMENTE

  // MOSTRAR EL DIALOG
  return showDialog<String>(
    context: context,
    builder: (context) {
      return AlertDialog(
        title: Internationalization.internationalization
            .createLocalizedSemantics(
          context,
          '${titleKey}_label',
          '${titleKey}_hint',
          '${titleKey}_label',
          const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
        ),
        content: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisSize: MainAxisSize.min, // AJUSTE DE TAMAÑO DEL CONTENIDO
          children: [
            TextField(
              controller: controllerScramble,
              decoration: InputDecoration(
                labelText: Internationalization.internationalization
                    .getLocalizations(context, scrambleLabelText),
                border: const OutlineInputBorder(),
              ),
            ),
            const SizedBox(
              height: 10,
            ),
            TextField(
              controller: controllerTime,
              decoration: InputDecoration(
                labelText: Internationalization.internationalization
                    .getLocalizations(context, timeLabelText),
                border: const OutlineInputBorder(),
              ),
            ),
          ],
        ),
        actions: [
          TextButton(
            onPressed: () async {
              String scramble = controllerScramble.text.trim();
              String time = controllerTime.text.trim();
              if (scramble.isNotEmpty && time.isNotEmpty) {
                TimeTraining timeTraining = TimeTraining(
                    idSession: sessionTipoActual.idSession,
                    scramble: scramble,
                    timeInSeconds: double.parse(time));

                // INSERTAR EL TIEMPO
                bool isInsert =
                    await timeTrainingDaoSb.insertNewTime(timeTraining);
                if (isInsert) {
                  // SI SE INSERTO CORRECTAMENTE SE MUESTRA UN SNACKBAR
                  AlertUtil.showSnackBarInformation(
                      context, "add_time_successfully");
                } else {
                  // SI SE INSERTO CORRECTAMENTE SE MUESTRA UN SNACKBAR
                  AlertUtil.showSnackBarInformation(
                      context, "add_time_error");
                } // VERIFICAR SI SE INSERTA EL TIEMPO CORRECTAMENTE
                Navigator.of(context).pop(); // CIERRA EL DIALOG
              } else {
                Navigator.of(context).pop(); // SE ESTA VACIO, NO RETORNA NADA
              }
            },
            child: Internationalization.internationalization
                .createLocalizedSemantics(
              context,
              'accept_label',
              'accept_hint',
              'accept_label',
              const TextStyle(fontSize: 16, color: Colors.blue),
            ),
          ),
        ],
      );
    },
  );
}