Validaciones en Xamarin Forms
Hace algún tiempo leí este gran artículo en el blog de Xamarin sobre cómo agregar validaciones para aplicaciones empresariales en Xamarin Forms. En esa publicación, se hablo sobre un gran modelo de validación basado en Validable objects, donde si quieres agregar una nueva regla de validación solo tienes que crear una nueva clase ValidationRule.
En este artículo, extenderé esa publicación agregando diferentes opciones de validación para poder ser usado con el mismo.
¿Cómo funciona?
Básicamente, tenemos una interfaz IValidatable, que representa nuestros objetos de validación, expone las reglas de validación y proporciona un método de validación.
Agregamos nuestra clase de validación base que implementa esta interfaz:
Para crear una nueva regla, creamos una clase que implementa la interfaz IValidationRule y hacemos nuestra lógica de validación dentro del método check.
Snippets
A continuación, se muestra una lista de casos de uso de validación comunes:
- IsNotNullOrEmptyRule: Valida que el valor no está vacío.
- IsLenghtValidRule: Valida que la longitud del string sea válida. Para este se specifica la longitud mínima / máxima.
- HasValidAgeRule: Se aplica a valores de fecha (por ejemplo, en un DatePicker). Comprueba si el usuario tiene al menos 18 años.
- IsValueTrueRule: Se aplica para valores booleanos (por ejemplo, en un CheckBox). Comprueba si el valor es verdadero.
- IsValidEmailRule: Comprueba si el correo electrónico es válido.
- IsValidPasswordRule: Comprueba si la contraseña coincide con la expresión regular especificada, por defecto tiene una expresión regular que exige una contraseña entre 8–20 dígitos, un carácter en mayúscula, un carácter en minúscula, un número y un carácter especial.
- MatchPairValidationRule: Comprueba si dos elementos coinciden. Por ejemplo, correo electrónico / confirmar correo electrónico, contraseña / confirmar contraseña.
Para esta validación, extendí la clase ValidableObject para tener dos objetos enlazables. Copie el código aquí.
Probemos nuestras validaciones
Para probar estas reglas de validación, creé una página de registro que valida:
- Nombre (First Name)-> El entry no está vacío.
- Apellido (Last Name) -> El entry no está vacío.
- Cumpleaños (Birthday) -> La fecha del DatePicker debe tener un mínimo de 18 años de diferencia de la fecha actual.
- Número de teléfono (Phone Number) -> Debe tener un máximo de 10 dígitos y un mínimo de 8.
- Correo electrónico / Confirmar correo electrónico (Email, Confirm Email)-> El entry debe tener un correo electrónico válido y ambos deben coincidir.
- Contraseña / Confirmar contraseña (Password, Confirm Password)-> El entry debe contener al menos una letra minúscula, una letra mayúscula, un dígito numérico y un carácter especial. Además, ambos deben coincidir.
- Términos y condiciones -> Se debe marcar el checkbox de términos y condiciones.
Nuestro ViewModel se verá así:.
Agregamos las reglas a estos objetos y configuramos el mensaje que queremos que muestre la UI cuando falla la validación.
El ValidableObject tiene un método Validate () que llamamos para realizar la validación.
Mira el SignUpViewModel completo aquí.
Finalmente, en la vista solo conecto estos elementos, usando las propiedades Value, HasErrors, Errors e IsValid.
Ya que los errores son una lista, utilizo este convertidor para obtener solo el primer error, y este convertidor para verificar si la propiedad IsValid es falsa. Además, tengo este behavior para cambiar la línea a rojo si hay un error.
Eso es todo, puedes ver el código fuente completo aquí.
Happy coding!