Rule

Introduction

Rule encapsulates validation logic and its associated validation message. They are reusable and easily testable.

Built-in Rules

Flrx Validator comes with lot of built-in rules:

RequiredRule

This Rule validates if the input provided to it is not empty.

Validator<String>(rules: [RequiredRule()])

Output

Entity is required

MaxLengthRule

This Rule validates if the input's length is less than the max limit.

Validator<String>(rules: [MaxLengthRule(20)])

Output

Entity should be less than 20 characters

MinLengthRule

This Rule validates if the input's length is more than the min limit.

Validator<String>(rules: [MinLengthRule(6)])

Output

Entity should be more than 6 characters

RegexRule

This Rule validates if the input matches a RegEx pattern.

Validator<String>(rules: [RegexRule(r"([(+]*[0-9]+[()+. -]*)")])

Output

Value is not a valid pattern

EmailRule

This Rule is an extension of RegexRule which checks the input against the email regex pattern.

Validator<String>(rules: [EmailRule()])

Output

Value is not a valid email address

InRule

This Rule checks if the value provided is in the list of accepted values.

Validator<String>(rules: [InRule(['value1', 'value2', 'value3'])])

Output

Entity is not in the list of accepted values.

NotInRule

This Rule checks if the value provided is not in the list of rejected values.

Validator<String>(rules: [NotInRule(['value1', 'value2', 'value3'])])

Output

Entity is in list of rejected values.

AnyRule

This Rule checks whether the input provided passes any of the Rules provided to AnyRule.

Validator<String>(rules: [AnyRule([MinLengthRule(6), EmailRule()])])

Output

Value is not a valid email address.

EachRule

This Rule checks whether the input provided passes all of the Rules provided to EachRule. This rule also returns the validation message for all Rules passed to it.

Validator<String>(rules: [
  EachRule([
    MinLengthRule(8),
    RegexRule(
      r'(?=.*[a-z])',
      validationMessage: ":entity should contain one lowercase character",
    ),
  ])
]);

Output

Validator

EachRule also accepts a concatenator which concatenates all the validation messages.

Custom Validation Rule

The built-in rules are not an exhaustive list of rules that can be possible. Hence the user can always extend the Rule class and create custom validation Rules according to the requirements.

The custom validation rule can be written this way:

import 'package:flrx_validator/flrx_validator.dart';

class CustomRule<T> extends Rule<T> {
  CustomRule({this.customParam, validationMessage}) : super(validationMessage);

  final String customParam;

  
  String onValidate(String entityName, T value) {
    return null;
  }

  
  Map<String, String> getRuleSpecificParams() {
    return {'customParam': customParam};
  }
}

Custom Validation Message

All rules can take a custom validation message in case you want to show something else instead of the built in message.

You can pass a custom message as follows

Validator<String>(rules: [
  RequiredRule(validationMessage:"Email is needed for creating an account")
])

Output

Email is needed for creating an account

Transforming the message

All rules can take transformMessage function as well just like the Validator.

You can refer Validator.transformMessage() for more Info.