ruleHandlers property

Map<String, RuleHandler> ruleHandlers
final

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];
  },
};