Validation Queue
Composable validation system with const support for Flutter and Dart.
Chain validators with termination strategies, handle cross-field validation, and compose results. All with const constructors for zero runtime overhead.
Features
- Const validators: Define validation at compile-time
- Composable queues: Chain multiple validations
- Termination strategies: Control when validation stops
- Cross-field validation: Validate based on other field values
- UI framework agnostic: Returns UIPayload for any rendering layer
Installation
dependencies:
validation_queue: ^0.1.0
Usage
Simple Validation
const validation = Validation(
validator: Validator.required(),
failureMsg: Failure(SimpleText('This field is required')),
);
final result = validation.validate('', []);
// Returns: Failure(SimpleText('This field is required'))
Validation Queue
const emailValidation = Validation.queue([
Validation(
validator: Validator.required(),
failureMsg: Failure(SimpleText('Email required')),
),
Validation(
validator: Validator.minLength(5),
failureMsg: Failure(SimpleText('Email too short')),
),
Validation(
validator: AllowPatternValidator(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'),
failureMsg: Failure(SimpleText('Invalid email format')),
),
]);
final result = emailValidation.validate('user@example.com', []);
Cross-Field Validation
const passwordValidation = Validation(
key: 'password', // Store this field's value
validator: Validator.minLength(8),
failureMsg: Failure(SimpleText('Password too short')),
);
const confirmValidation = Validation.relatedTo(
'password', // Reference the stored password value
validator: IsSameAsValidator(),
failureMsg: Failure(SimpleText('Passwords must match')),
);
final history = <ValidationState>[];
passwordValidation.validate('mypassword', history);
confirmValidation.validate('different', history);
// Returns: Failure(SimpleText('Passwords must match'))
Architecture
Validation → Validator → UIPayload
(rule) (logic) (result)
Validations are const and can be defined once and reused throughout your app.