Validate input value with an efficient way.
Run this command:
flutter pub add input_validator
The make
method will return null
if the validation passed.
/// import 'package:input_validator/input_validator.dart';
/// here is a basic example
InputValidator.make(rules:"required|min_length:6",value:"password");
rules parameter is a string that guide what to do with the value. You can provide as many as posable rules, which should be separated by |
sign. Some rules required extra params like rule:param,param
, here parameters are separated by comma. A quick example: you want to get user gender in male,female or other, so it would be like in:male,female,other
. See Available Validation Rules and explanation.
The value is the given payload for validation.
You can pass messages
parameter to the make method. It accept Map<String, dynamic>
. The messages key should match with rule name. The message value should be either String
or CustomHandler.
Example:
InputValidator.make(
rules:"required|min_length:6",
value:null,
messages:{
"required": "Password is required."
},
);
Here is an example of custom rule.
/// A strong password validation,
/// Minimum 1 Upper case
/// Minimum 1 lowercase
/// Minimum 1 Numeric Number
/// Minimum 1 Special Character
/// Common Allow Character ( ! @ # $ & \* ~ )
InputValidator.make(
rules:"strongPassword",
value:null,
messages:{
"strongPassword": CustomHandler(onHandle: (payload, _) {
String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$';
RegExp regExp = new RegExp(pattern);
return regExp.hasMatch(payload) ? null:"Invalid password!";
})
},
);
Build form via form builder. See the full example on the example tab.
var _form = InputValidator.builder(
fields: {
"full_name": FieldData(rules: "required|min_length:4"),
"username": FieldData(rules: "required|min_length:4"),
"age": FieldData(rules: "required|min:10"),
},
);
Container(
child: _form.build(context, child: (state) => ....)
)
Below is a list of all available validation rules and their function:
Required, Min (Number), Max (Number), Numeric (Number), Size (Number), Length (String), Max Length (String), Min Length (String), Email, In, Date, Date Between, Date Before, Date After, Date Before Inclusive, Date After Inclusive, Custom Rule,
The field under validation must be present in the input data and not empty. A field is considered "empty" if one of the following conditions are true:
The value is null.
The value is an empty string.
The field under validation must have a minimum value and not empty and the value should be convertible to numeric value.
// example
InputValidator.make(value: "5", rules: "min:10");
// reuslt: Provide at least 10.
The field under validation must have a maximum value and not empty and the value should be convertible to numeric value.
// example
InputValidator.make(value: "15", rules: "max:10");
// reuslt: Maximum limit is 10.
The field under validation must be convertible to a numeric value.
// example
InputValidator.make(value: "abc", rules: "numeric");
// reuslt: Invalid number input.
The field under validation must be convertible to a numeric value and exec as the given size.
// example
InputValidator.make(value: "5", rules: "size:10");
// reuslt: The size should be 10.
It will call the toString()
method on the value and check the length of the string and match with the given length.
// example
InputValidator.make(value: "5", rules: "length:10");
// reuslt: The input should be 10 characters.
It will call the toString()
method on the value and check the length of the string and match with the given length.
// example
InputValidator.make(value: "5", rules: "min_length:10");
// reuslt: Provide at least 5 characters
It will call the toString()
method on the value and check the length of the string and match with the given length.
// example
InputValidator.make(value: "15", rules: "max_length:10");
// reuslt: Provide maximum 10 characters
It will check with a RegEx pattern. You can customize the pattern by override the custom handler.
// example
InputValidator.make(value: "example@gmail", rules: "email");
// reuslt: Invalid email address.
The field under validation must be included in the given list of values.
// example
InputValidator.make(value: "world", rules: "in:1,hello,world");
// reuslt: null
Valid date that could be parsed with DateTime.parse()
// example
InputValidator.make(value: "date", rules: "date");
// reuslt: Invalid date
Valid date that could be parsed with DateTime.parse()
. It will make sure that the given date is newer then minimum date and older then maximum date.
// example 'date_between:min,max'
InputValidator.make(value: "2021-04-10", rules: "date_between:2021-05-17,2021-07-17");
// reuslt: Date out of range.
Valid date that could be parsed with DateTime.parse()
. It will make sure that the given date is older then checking date. Also you can try Date Before Inclusive.
// example 'date_before:date'
InputValidator.make(value: "2021-04-10", rules: "date_between:2021-05-17");
// reuslt: null
Valid date that could be parsed with DateTime.parse()
. It will make sure that the given date is newer then checking date. Also you can try Date After Inclusive.
// example 'date_after:date'
InputValidator.make(value: "2021-04-10", rules: "date_after:2021-05-17");
// reuslt: Provide newer date.
Valid date that could be parsed with DateTime.parse()
. It will make sure that the given date is newer or equal to the checking date.
// example 'date_after_inclusive:date'
InputValidator.make(value: "2021-05-17", rules: "date_after_inclusive:2021-05-17");
// reuslt: null
Valid date that could be parsed with DateTime.parse()
. It will make sure that the given date is older or equal to the checking date.
// example 'date_before_inclusive:date'
InputValidator.make(value: "2021-05-17", rules: "date_before_inclusive:2021-05-17");
// reuslt: null