Easy Data Validator, una librería de validaciones para Flutter

Ya que en el último post estuvimos viendo como se crean los formularios en Flutter, hoy vamos a ver cómo podemos validar los datos de entrada de esos formularios.

Es sumamente importante que validemos que datos que entran en nuestro dominio de la aplicación y para ello en nuestras vistas tenemos que comprobar que lo que los usuarios introducen en los inputs de entrada son los que nosotros deseamos que sean.

Para este fin existen multitud de librerías en Pub.dev, el repositorio oficial de paquetes para Flutter, pero en esta ocasión vamos a darle un vistazo a Easy Data Validator.

¿Y porqué esta? Básicamente porque la he desarrollado yo y me gustaría recibir todo el feedback posible, por supuesto todo el código es Open Source y está disponible en GitHub.

Instalando Easy Data Validator

La instalación se realiza del mismo modo que cualquier otra librería en Flutter, añadimos en el archivo pubspec.yaml :

dependencies:
  easy_data_validator: ">=1.0.0 <2.0.0"

Tras esto hacemos flutter pub get y esperamos a que se descargue en nuestro proyecto.

Una vez instalada podemos utilizarla en cualquier parte de nuestra aplicación importando el paquete a nuestra clase.

Validando datos

El uso de Easy Data Validator es muy simple. Instanciamos la clase Validator y pasamos por el constructor el texto que deseamos validar. A partir de aquí solo nos queda ir añadiendo reglas de validación a la instancia creada llamando al método addRule() y pasándole la instancia de la regla que deseemos aplicar.

Por ejemplo si deseamos validar que un texto no esté vacío y que al menos contenga un carácter en mayúsculas haríamos lo siguiente:

final isValid = Validator(text: "Passw0rd#Suc2021")
      .addRule(NonEmptyRule())
      .addRule(AtLeastOneUppercaseRule())
      .check();

Al final de las reglas de validación tenemos que llamar al método check() para que ejecute la validación de todas las reglas añadidas y nos devuelva un booelano con el resultado.

Podemos añadir todas las reglas que deseemos y el orden de estas da igual cuál sea.

Por defecto cada regla posee un texto predeterminado que se utilizará si añadimos el método addErrorCallback() a la cadena de validaciones. Este texto se puede modificar en el momento de añadir la regla de validación a la cadena de validaciones que se tienen que ejecutar.

Este texto se pasa por el constructor de cada regla, de este modo:

final isValid = Validator(text: "Passw0rd#Suc2021")
      .addRule(NonEmptyRule(errorMsg: "Este campo no puede estar vacío"))
      .addRule(AtLeastOneUppercaseRule())
      .check();

Creando una regla de validación personalizada

Easy Data Validator viene con una veintena aproximada de reglas de validación, de email, de tarjetas de crédito, de longitud de textos, de comparación , …. Pero si deseas crear tu propia regla de validación es sumamente sencillo el hacerlo.

Lo único que tendrás que hacer es crear tu clase que extienda de BaseRule() e implementar el método validate(). Es un método que tiene que devolver un  booleano y que recibe por parámetro el valor del texto introducido para validar.

En el cuerpo de este método solo tienes que realizar la lógica de validación que consideres oportuna.

class CurrencyDollarRule extends BaseRule {
  CurrencyDollarRule({String target, String errorMsg = "the text should contain a dollar symbol currency"}):   super(errorMsg: errorMsg);

  @override
  bool validate(String text) {
    if (text.isEmpty) return false;
     return text.contains("$");
  }
}

El objeto Validator posee dos métodos, onErrorCallback y onSuccessCallback que podemos añadir a la cadena de validación y que serán llamados en el caso de que exista un error en la validación o que esta finalice correctamente.

En estos métodos tenemos que añadir una función que será invocada cuando se produzca el error o cuando se realice satisfactoriamente la validación.

Como comentábamos antes, en el caso de error, el callback de error nos pasará como parámetro el mensaje de error de la regla de validación que no ha sido satisfactoria.

Validator(text: "Passw0rd#Suc2021")
      .addRule(NonEmptyRule())
      .addRule(AtLeastOneUppercaseRule())
      .addErrorCallback((msg) => print(msg))
      .addSuccessCallback(() => print("validation successful"))
      .check();

La llamada a estos métodos es opcional.

Espero que esta librería os ayude en vuestros desarrollos y quedo abierto a cualquier feedback al respecto de mejoras o errores y por supuesto cualquier Pull Request es bienvenido.

Comparte si lo consideras interesante
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.