just_validation 0.4.0
just_validation: ^0.4.0 copied to clipboard
A simple and flexible validation library for Dart that provides validators for common use cases.
example/just_validation_example.dart
import 'package:just_validation/just_validation.dart';
// Example model
class User {
final String? name;
final String? email;
final int? age;
final String? password;
final String? confirmPassword;
User({this.name, this.email, this.age, this.password, this.confirmPassword});
}
// Validator for User
class UserValidator extends AbstractValidator<User> {
UserValidator() {
// Name validation
ruleFor((user) => user.name)
.notNull()
.withMessage('Name is required')
.notEmpty()
.withMessage('Name cannot be empty')
.length(2, 50)
.withMessage('Name must be between 2 and 50 characters');
// Email validation
ruleFor((user) => user.email)
.notNull()
.notEmpty()
.emailAddress()
.withMessage('Please enter a valid email address');
// Age validation with condition
ruleFor((user) => user.age)
.greaterThanOrEqual(18)
.withMessage('Must be at least 18 years old')
.lessThan(120)
.withMessage('Invalid age')
.when((user) => user.age != null);
// Password validation
ruleFor((user) => user.password)
.notEmpty()
.minLength(8)
.withMessage('Password must be at least 8 characters')
.matches(
RegExp(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)'),
message: 'Password must contain uppercase, lowercase and numbers',
);
// Confirm password validation
ruleFor((user) => user.confirmPassword)
.notEmpty()
.equalTo((user) => user.password, 'password')
.withMessage('Passwords must match');
}
}
void main() {
print('=== JustValidation Examples ===\n');
// Example 1: Valid user
print('Example 1: Valid user');
final validUser = User(
name: 'John Doe',
email: 'john.doe@example.com',
age: 25,
password: 'SecurePass123',
confirmPassword: 'SecurePass123',
);
final validator = UserValidator();
var result = validator.validate(validUser);
if (result.isValid) {
print('✓ Validation passed!\n');
} else {
print('✗ Validation failed:');
for (var error in result.errors) {
print(' - ${error.propertyName}: ${error.errorMessage}');
}
print('');
}
// Example 2: Invalid user
print('Example 2: Invalid user');
final invalidUser = User(
name: 'A',
email: 'invalid-email',
age: 15,
password: 'weak',
confirmPassword: 'different',
);
result = validator.validate(invalidUser);
if (result.isValid) {
print('✓ Validation passed!\n');
} else {
print('✗ Validation failed:');
for (var error in result.errors) {
print(' - ${error.propertyName}: ${error.errorMessage}');
}
print('');
}
// Example 3: Partial user (null age)
print('Example 3: User with null age (should skip age validation)');
final partialUser = User(
name: 'Jane Smith',
email: 'jane@example.com',
age: null,
password: 'ValidPass123',
confirmPassword: 'ValidPass123',
);
result = validator.validate(partialUser);
if (result.isValid) {
print('✓ Validation passed!\n');
} else {
print('✗ Validation failed:');
for (var error in result.errors) {
print(' - ${error.propertyName}: ${error.errorMessage}');
}
print('');
}
// Example 4: Check specific property errors
print('Example 4: Getting errors for a specific property');
final user = User(
name: '',
email: 'bad-email',
password: 'Pass123',
confirmPassword: 'Pass123',
);
result = validator.validate(user);
final emailErrors = result.errorMessagesFor('Property');
print('Email errors: $emailErrors\n');
}