showConfirmWithOldPass static method

Future<bool?> showConfirmWithOldPass(
  1. BuildContext context,
  2. String key,
  3. String oldPass,
  4. UserClass currentUser,
)

Método para mostrar una alerta de confirmación con la contraseña antigua.

Este método muestra un AlertDialog en el que el usuario debe ingresar su contraseña actual para confirmar una acción (como cambiar la contraseña).

Parámetros:

  • context: El contexto de la aplicación donde se mostrará el diálogo.
  • key: Clave de localización para personalizar el mensaje del diálogo.
  • oldPass: Clave de localización para el campo de la contraseña actual.
  • currentUser: Objeto del usuario actual para validar la contraseña.

Devuelve true si la contraseña ingresada es correcta, false si el usuario cancela la acción, y null si ocurre un error.

Validaciones:

  • Se valida que la contraseña ingresada cumpla con los requisitos y coincida con la actual.
  • Si la validación es exitosa, se redirige a la pantalla principal.

Implementation

static Future<bool?> showConfirmWithOldPass(
    BuildContext context, String key, String oldPass, UserClass currentUser) {
  final oldPasswordController = TextEditingController();
  final formKey = GlobalKey<FormState>();

  return showDialog<bool>(
      context: context,
      builder: (context) {
        return AlertDialog(
          backgroundColor: AppColors.lightVioletColor,
          title: Internationalization.internationalization
              .createLocalizedSemantics(
            context,
            '${key}_label',
            '${key}_hint',
            '${key}_label',
            const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          content: Internationalization.internationalization
              .createLocalizedSemantics(
            context,
            '${oldPass}_form_label',
            '${oldPass}_form_hint',
            '${oldPass}_form_hint',
            const TextStyle(fontSize: 16),
          ),
          actions: <Widget>[
            // CAMPO PARA INTRODUCIR SU VIEJA CONTRASEÑA
            Form(
              key: formKey,
              child: PasswordFieldForm(
                icon: IconClass.iconMaker(context, Icons.lock, "password"),
                labelText: Internationalization.internationalization
                    .getLocalizations(context, '${oldPass}_form_label'),
                hintText: Internationalization.internationalization
                    .getLocalizations(context, '${oldPass}_form_label'),
                controller: oldPasswordController,
                validator: (value) => Validator.validatePassword(
                    value, true, false, currentUser, context),
                labelSemantics: Internationalization.internationalization
                    .getLocalizations(context, '${oldPass}_form_label'),
                hintSemantics: Internationalization.internationalization
                    .getLocalizations(context, '${oldPass}_form_label'),
                borderSize: 15,
                colorBox: AppColors.imagenBg,
                passwordOnSaved: (String? value) {},
              ),
            ),

            const SizedBox(
              height: 10,
            ),

            // BOTONES PARA CANCELAR O DARLE OK
            Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                TextButton(
                  onPressed: () {
                    // CIERRA LA ALERTA Y RETORNA FALSE
                    Navigator.pop(context, false);
                  },
                  child: Internationalization.internationalization
                      .createLocalizedSemantics(
                    context,
                    'cancel_label',
                    'cancel_hint',
                    'cancel_label',
                    const TextStyle(fontSize: 16, color: Colors.red),
                  ),
                ),
                TextButton(
                  onPressed: () {
                    if (formKey.currentState!.validate()) {
                      // CAMBIAR DE PESTAÑA
                      Navigator.pop(context, true);

                      ChangeScreen.changeScreen(
                          const BottomNavigation(), context);
                    } // VALIDAR SI LOS DATOS ESTAN CORRECTOS
                  },
                  child: Internationalization.internationalization
                      .createLocalizedSemantics(
                    context,
                    'accept_label',
                    'accept_hint',
                    'accept_label',
                    const TextStyle(fontSize: 16, color: Colors.blue),
                  ),
                ),
              ],
            )
          ],
        );
      });
}