ruleHandlers property
Registry of validation rules. Can be extended by users to add custom rules.
Implementation
static final Map<String, RuleHandler> ruleHandlers = {
'required': (val, _, __) {
if (val == null) return false;
if (val is String) return val.trim().isNotEmpty;
if (val is List) return val.isNotEmpty;
if (val is Map) return val.isNotEmpty;
return true;
},
'email': (val, _, __) {
if (val == null || val.toString().isEmpty) return true;
return RegExp(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
.hasMatch(val.toString());
},
'min': (val, arg, __) {
if (val == null || arg == null) return true;
final min = int.tryParse(arg) ?? 0;
if (val is String) return val.length >= min;
if (val is num) return val >= min;
if (val is List) return val.length >= min;
return true;
},
'max': (val, arg, __) {
if (val == null || arg == null) return true;
final max = int.tryParse(arg) ?? 0;
if (val is String) return val.length <= max;
if (val is num) return val <= max;
if (val is List) return val.length <= max;
return true;
},
'numeric': (val, _, __) {
if (val == null) return true;
return num.tryParse(val.toString()) != null;
},
'boolean': (val, _, __) {
if (val == null) return true;
if (val is bool) return true;
final s = val.toString().toLowerCase();
return s == 'true' || s == 'false' || s == '1' || s == '0';
},
'in': (val, arg, __) {
if (val == null || arg == null) return true;
final options = arg.split(',');
return options.contains(val.toString());
},
'not_in': (val, arg, __) {
if (val == null || arg == null) return true;
final options = arg.split(',');
return !options.contains(val.toString());
},
'url': (val, _, __) {
if (val == null || val.toString().isEmpty) return true;
final uri = Uri.tryParse(val.toString());
return uri != null && uri.hasScheme && uri.hasAuthority;
},
'integer': (val, _, __) {
if (val == null) return true;
return int.tryParse(val.toString()) != null;
},
'string': (val, _, __) => val is String,
'array': (val, _, __) => val is List,
'alpha': (val, _, __) => val == null || RegExp(r'^[a-zA-Z]+$').hasMatch(val.toString()),
'alpha_num': (val, _, __) =>
val == null || RegExp(r'^[a-zA-Z0-9]+$').hasMatch(val.toString()),
'regex': (val, arg, __) {
if (val == null || arg == null) return true;
try {
return RegExp(arg).hasMatch(val.toString());
} catch (_) {
return false;
}
},
'confirmed': (val, arg, data) {
final fieldToCompare = arg ?? 'password_confirmation';
return val == data[fieldToCompare];
},
};