showAlertFormAddTime static method
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),
),
),
],
);
},
);
}