import 'package:flutter/foundation.dart'; abstract class Validator { Validator({required this.errorMessage}); final String errorMessage; bool isValid(T? value); String? call(T? value) => !isValid(value) ? errorMessage : null; } class TextValidator extends Validator { TextValidator( {this.minLength, this.maxLength, this.pattern, String errorMessage = '', this.length, this.isAutovalidate = false}) : super(errorMessage: errorMessage); final int? minLength; final int? maxLength; final List? length; final bool isAutovalidate; String? pattern; @override bool isValid(String? value) { if (value == null || value.isEmpty) { return isAutovalidate ? true : false; } return value.length > (minLength ?? 0) && (length?.contains(value.length) ?? true) && ((maxLength ?? 0) > 0 ? (value.length <= maxLength!) : true) && (pattern != null ? match(value) : true); } bool match(String value) => pattern != null ? RegExp(pattern!).hasMatch(value) : false; }