just_validation 0.4.0 copy "just_validation: ^0.4.0" to clipboard
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');
}
2
likes
160
points
124
downloads

Publisher

unverified uploader

Weekly Downloads

A simple and flexible validation library for Dart that provides validators for common use cases.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on just_validation