universal_validator 1.0.3 copy "universal_validator: ^1.0.3" to clipboard
universal_validator: ^1.0.3 copied to clipboard

Comprehensive form validation for Flutter. Includes validators & widgets for Email, Phone, Password, and Indian documents like PAN, GST, Aadhaar, IFSC, UPI, & Vehicle.

Universal Validator #

pub package popularity likes pub points

A comprehensive Flutter package providing reusable form validators, smart input widgets, and formatting utilities. Reduce boilerplate code and ensure consistent validation across your Flutter applications.

✨ Features #

  • 🔍 Pre-built Validators: Email, phone, password, name, PAN, GST, and more
  • 🎯 Smart Widgets: Input fields with built-in validation and formatting
  • 🌍 International Support: Phone numbers, email formats, and localization
  • Real-time Validation: Debounced validation with customizable timing
  • 🎨 Customizable: Custom error messages, validation rules, and formatting
  • 📱 Cross-platform: Works on iOS, Android, Web, and Desktop
  • 🧪 Well Tested: Comprehensive test coverage with property-based testing

📦 Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  universal_validator: ^1.0.3

Then run:

flutter pub get

🚀 Quick Start #

Basic Validators #

import 'package:universal_validator/universal_validator.dart';

// Email validation
String? emailError = EmailValidator.validate('user@example.com');
print(emailError); // null (valid)

// Phone validation (supports international formats)
String? phoneError = PhoneValidator.validate('+919876543210');
print(phoneError); // null (valid)

// Password validation
String? passwordError = PasswordValidator.validate('MySecure123!');
print(passwordError); // null (valid)

Indian Documents Validation #

// Aadhaar validation
print(AadhaarValidator.validate('9999 9999 0026')); // null (valid)

// IFSC validation
print(IFSCValidator.validate('HDFC0000123')); // null (valid)

// UPI ID validation
print(UPIIDValidator.validate('user@bank')); // null (valid)

// Vehicle Number validation
print(VehicleNumberValidator.validate('MH12AB1234')); // null (valid)

Smart Text Fields #

import 'package:flutter/material.dart';
import 'package:universal_validator/universal_validator.dart';

class MyForm extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // Email field with built-in validation
        UTextField(
          fieldType: FieldType.email,
          decoration: InputDecoration(
            labelText: 'Email',
            hintText: 'Enter your email',
          ),
          onValidationChanged: (result) {
            print('Email valid: ${result.isValid}');
          },
        ),
        
        // Phone field with formatting
        UTextField(
          fieldType: FieldType.phone,
          decoration: InputDecoration(
            labelText: 'Phone Number',
            hintText: 'Enter phone number',
          ),
          showSuccessIndicator: true,
        ),
        
        // Password field with strength validation
        UTextField(
          fieldType: FieldType.password,
          decoration: InputDecoration(
            labelText: 'Password',
            hintText: 'Enter a strong password',
          ),
          obscureText: true,
        ),
      ],
    );
  }
}

📋 Supported Validators #

Validator Description Example
EmailValidator RFC-compliant email validation user@domain.com
PhoneValidator International & Indian phone numbers +919876543210, 9876543210
PasswordValidator Configurable password strength MySecure123!
NameValidator Names with cultural character support John Doe, Mary-Jane
PANValidator Indian PAN card format ABCDE1234F
GSTValidator Indian GST number with checksum 22AAAAA0000A1ZC
AadhaarValidator Indian Aadhaar number with Verhoeff checksum 9999 9999 0026
IFSCValidator Indian Financial System Code HDFC0000123
UPIIDValidator Unified Payments Interface ID user@bank
VehicleNumberValidator Indian Vehicle Registration Number MH12AB1234

🎯 Smart Widgets #

UTextField #

A powerful text field widget with built-in validation and formatting:

UTextField(
  fieldType: FieldType.email,
  enableRealTimeValidation: true,
  validationDebounce: Duration(milliseconds: 300),
  showSuccessIndicator: true,
  customErrorMessages: {
    'email': 'Please enter a valid email address',
  },
  onValidationChanged: (ValidationResult result) {
    // Handle validation state changes
    if (result.isValid) {
      print('Input is valid!');
    } else {
      print('Error: ${result.errorMessage}');
    }
  },
)

Field Types #

enum FieldType {
  email,    // Email addresses
  phone,    // Phone numbers (international/Indian)
  password, // Passwords with strength validation
  name,     // Person names
  pan,      // Indian PAN cards
  gst,      // Indian GST numbers
  aadhaar,  // Indian Aadhaar numbers
  ifsc,     // Indian Financial System Codes
  upi,      // UPI IDs
  vehicleNumber, // Indian Vehicle numbers
  custom,   // Custom validation rules
}

⚙️ Advanced Configuration #

Custom Password Validation #

final passwordConfig = PasswordConfig(
  minLength: 12,
  requireUppercase: true,
  requireLowercase: true,
  requireNumbers: true,
  requireSpecialChars: true,
  forbiddenPasswords: ['password123', 'admin'],
);

UTextField(
  fieldType: FieldType.password,
  configuration: FieldConfiguration(
    parameters: {'passwordConfig': passwordConfig},
  ),
)

Custom Validation Rules #

UTextField(
  fieldType: FieldType.custom,
  configuration: FieldConfiguration(
    customRules: [
      ValidationRule(
        name: 'minLength',
        validator: (value) => value?.length >= 5,
        errorMessage: 'Must be at least 5 characters',
        priority: 1,
      ),
      ValidationRule(
        name: 'noSpaces',
        validator: (value) => !value?.contains(' ') ?? true,
        errorMessage: 'Spaces are not allowed',
        priority: 2,
      ),
    ],
  ),
)

Input Formatting #

// Phone number formatting
String formatted = PhoneFormatter.format('9876543210');
print(formatted); // "98765 43210"

// Name formatting (title case)
String formattedName = NameFormatter.format('john doe');
print(formattedName); // "John Doe"

// PAN formatting (uppercase)
String formattedPAN = PANFormatter.format('abcde1234f');
print(formattedPAN); // "ABCDE1234F"

🌍 Internationalization #

Phone Number Support #

// Indian numbers
PhoneValidator.validate('9876543210'); // ✅ Valid
PhoneValidator.validate('+919876543210'); // ✅ Valid

// US numbers
PhoneValidator.validate('+12345678901'); // ✅ Valid

// UK numbers
PhoneValidator.validate('+441234567890'); // ✅ Valid

Custom Error Messages #

UTextField(
  fieldType: FieldType.email,
  customErrorMessages: {
    'email': 'कृपया एक वैध ईमेल पता दर्ज करें', // Hindi
    'required': 'यह फ़ील्ड आवश्यक है',
  },
)

🧪 Testing #

The package includes comprehensive property-based tests to ensure reliability:

# Run all tests
flutter test

# Run specific validator tests
flutter test test/email_validator_property_test.dart
flutter test test/phone_validator_property_test.dart

📱 Platform Support #

Platform Support
Android
iOS
Web
macOS
Windows
Linux

📄 License #

This project is licensed under the MIT License - see the LICENSE file for details.

📞 Support #


Made with ❤️ by Dhairya Soni

1
likes
150
points
63
downloads

Publisher

unverified uploader

Weekly Downloads

Comprehensive form validation for Flutter. Includes validators & widgets for Email, Phone, Password, and Indian documents like PAN, GST, Aadhaar, IFSC, UPI, & Vehicle.

Repository (GitHub)
View/report issues

Topics

#validation #form #widget #validators #flutter

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on universal_validator