dup 1.0.0 copy "dup: ^1.0.0" to clipboard
dup: ^1.0.0 copied to clipboard

A powerful, flexible schema-based validation library for Dart and Flutter, inspired by JavaScript's yup.

dup #

A powerful, flexible validation library for Dart and Flutter, inspired by JavaScript's yup.

Features #

  • Schema-based validation for forms and data models
  • Chainable, composable validation rules
  • Customizable error messages and labels
  • Exception-based error handling
  • Easy integration with Flutter

Installation #

Add dup to your pubspec.yaml:

dependencies:
dup: ^1.0.0

Then run:

dart pub get

Usage #

dup enables you to define validation rules for your data using a schema-based approach, making your validation logic clean, reusable, and maintainable.

1. Define a validation schema #

First, define a schema that describes the validation rules for each field.
Each field uses a validator instance (e.g., ValidateString, ValidateNumber).

import 'package:dup/dup.dart';

final BaseValidatorSchema schema = BaseValidatorSchema({
  'email': ValidateString()
      .email()
      .required()
      .setLabel('Email'),
  'password': ValidateString()
      .password()
      .required()
      .setLabel('Password'),
  'age': ValidateNumber()
      .min(18)
      .max(99)
      .setLabel('Age'),
});
  • email must be a valid email address and is required.
  • password must meet your password rule and is required.
  • age must be between 18 and 99.

2. Prepare request data #

Create a Map containing the values you want to validate.

final request = {
  'email': 'test@example.com',
  'password': '1234',
  'age': 20,
};

3. Validate #

Call useUiForm.validate() to validate your data against the schema.
If validation fails, a FormValidationException will be thrown with a map of error messages.

try {
  await useUiForm.validate(schema, request);
  // Validation passed!
} catch (e) {
  print(e.toString); // Example: 'Invalid email format.'
}

Example: Validating a request object #

You can encapsulate validation logic inside your data classes for better structure and reusability.

1. Define your request class #

import 'package:dup/dup.dart';

class RequestObject {
  String? title;
  String? contents;

  RequestObject({this.title, this.contents});

  /// Validates the request fields using dup's schema-based validation.
  Future validate() async {
    final BaseValidatorSchema schema = BaseValidatorSchema({
      'title': ValidateString()
          .min(2)
          .setLabel('Title')
          .required(),
      'contents': ValidateString()
          .min(2)
          .setLabel('Contents')
          .required(),
    });
    await useUiForm.validate(schema, {
      'title': title,
      'contents': contents,
    });
  }
}
  • title is required and must be at least 2 characters long.
  • contents is required and must be at least 2 characters long.

2. Use your request class and handle validation #

void main() async {
  final RequestObject params = RequestObject(title: 'Hello', contents: 'W');
  try {
    await params.validate();
    print('Validation passed!');
  } catch (e) {
    print(e.toString); // 'Contents must be at least 2 characters long.'
  }
}

How it works #

  • BaseValidator: Abstract class for creating custom validators.
  • ValidateString / ValidateNumber / ValidateList: Built-in validator classes for strings, numbers, and lists.
  • BaseValidatorSchema: Holds the schema definition (map of field names to validators).
  • UiFormService: Provides the validate() method to check a schema and request map, and throws FormValidationException on failure.
  • FormValidationException: Contains a map of field names to error messages.

Tips #

  • You can chain multiple validation rules for each field.
  • Use .setLabel() to customize error messages with a user-friendly field name.

API Overview #

  • BaseValidator: Abstract base class for validators
  • ValidateString: String validation (min, max, email, password, etc.)
  • ValidateNumber: Number validation (min, max, isInteger, etc.)
  • ValidateList: List validation
  • BaseValidatorSchema: Schema for form validation
  • UiFormService: Service for validating schemas and handling errors
  • FormValidationException: Exception thrown on validation failure
2
likes
0
points
37
downloads

Publisher

unverified uploader

Weekly Downloads

A powerful, flexible schema-based validation library for Dart and Flutter, inspired by JavaScript's yup.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on dup