New Validation
You can create a new validation by extending the Validator
class. The Validator
class is an abstract class that contains a method to validate the input value.
The following code shows how to create a new validation:
import 'package:validasi/validasi.dart';
class MyValidator extends Validator<String> {
@override
StringValidator nullable() => super.nullable();
@override
StringValidator custom(CustomCallback<String> callback) =>
super.custom(callback);
@override
StringValidator customFor(CustomRule<String> customRule) =>
super.customFor(customRule);
}
That's it! That's all you need to create a new validation. You can now use the MyValidator
class to validate the input value.
Adding Rule
You can add a new rule by adding a new method to your class. Following the convention of Validasi, the method name should match the rule name, and the method should return the same type as the class.
The following code shows how to add a new rule to the MyValidator
class:
import 'package:validasi/validasi.dart';
class MyValidator extends Validator<String> {
MyValidator myRule() {
addRule(
name: 'myRule',
test: (value) => value == 'myValue',
message: ':name must be myValue',
);
return this;
}
}
The rule will be registered using the addRule
method. The addRule
method requires three parameters:
name
: The name of the rule.test
: The test function to validate the input value.message
: The error message to return if the test function fails.
Similarly to customizing default error message you can also use :name
here!
Adding Transformer Support
In order to add Transformer support to your custom validator, you can inherit the transformer
property from the Validator
class.
import 'package:validasi/validasi.dart';
class MyValidator extends Validator<String> {
MyValidator({super.transformer});
}
That's it!
Using your Custom Validator
In order to use your Custom Validator just call the class like how you did it with normal Dart.
MyValidator myValidator = MyValidator();
myValidator.myRule().parse('myValue');
Your Custom Validator can also be passed to sub-type of Validator
like ArrayValidator
and ObjectValidator
.
Validasi.array(MyValidator());
Validasi.object({
'name': MyValidator(),
});
Adding to Validasi
Now if you want to add your custom validator to Validasi, you have to extends the Validasi
class and add a new method to return your custom validator.
import 'package:validasi/validasi.dart';
class MyValidasi extends Validasi {
MyValidator myValidator() => MyValidator();
}
import 'package:app/utils/validation.dart';
void main() {
MyValidator.myValidator().myRule().parse('myValue');
}
As of currently, Dart doesn't support static method extensions, see this issue for more information.