validator_annotation 1.0.1-alpha copy "validator_annotation: ^1.0.1-alpha" to clipboard
validator_annotation: ^1.0.1-alpha copied to clipboard

A validator annotation for class. It will make easier for you to validate your model or DTO.

Pub Package

Defines annotations that will be used by packaged validator_generator to build class validator.

Annotation Values #

Class #

ClassValidator // Annotation in class level

Field Member #

String #

These are example supported annotation for string member :

IsStringValidator
IsNotEmptyStringValidator
IsEmptyStringValidator
MinStringLengthValidator
MaxStringLengthValidator

More

Numeric #

These are example supported annotation for numeric member :

IsZeroValidator
IsNegativeNumberValidator
IsPostiveNumberValidator

More

Usages #

Install #

dart pub get validator_annotation
dart pub get --dev validator_generator

Example #

Define a class, let say UserModel with file name user_model.dart. Then annotated UserModel with ClassValidator:

import 'package:validator_annotation/validator_annotation.dart';

part 'user_model.validator.dart';

@ClassValidator(
  // Stop validating the rest of instance members.
  // Only get the first error
  stopWhenFirstError: false,
  // Naming convention on each validator function
  namingConvention: NamingConvention.snackCase,
)
class UserModel {
  // apply not empty rule on email field
  @IsNotEmptyStringValidator()
  // apply email rule on email field
  @IsEmailValidator(
    // customize field name
    // when null it will take declaration name
    fieldName: 'email',
    // customize error message
    errorMessage: 'is not email',
  )
  // `validator_generator` will generate `validate_email` function,
  // to validate this field.
  // Take a look on example.validator.dart
  final String email;

  @IsNotEmptyStringValidator()
  final String password;

  const UserModel({
    required this.email,
    required this.password,
  });
}

Run validator_generator to generate validator class

dart pub run build_runner build

The validator_generator creates the corresponding part user_model.validator.dart:

// GENERATED CODE - DO NOT MODIFY BY HAND

// ignore_for_file: non_constant_identifier_names

part of 'user_model.dart';

// **************************************************************************
// ValidatorModelGenerator
// **************************************************************************

class UserModelValidator {
  static String? validate_email(String value) {
    final validatorAnnotations = [
      const IsNotEmptyStringValidator(),
      const IsEmailValidator(fieldName: 'email', errorMessage: 'is not email')
    ];
    return validateField(
      value,
      validatorAnnotations,
    );
  }

  static String? validate_password(String value) {
    final validatorAnnotations = [const IsNotEmptyStringValidator()];
    return validateField(
      value,
      validatorAnnotations,
    );
  }

  static ValidationResult validate(UserModel instance) {
    // validation data
    final validationDatas = [
      ValidationData(
        instanceMemberSymbol: 'email',
        valueToValidate: instance.email,
        annotations: [
          const IsNotEmptyStringValidator(),
          const IsEmailValidator(
              fieldName: 'email', errorMessage: 'is not email')
        ],
      ),
      ValidationData(
        instanceMemberSymbol: 'password',
        valueToValidate: instance.password,
        annotations: [const IsNotEmptyStringValidator()],
      )
    ];

    // validator options
    const stopWhenFirstError = false;
    return validateInstance(
      validationDatas,
      stopWhenFirstError: stopWhenFirstError,
    );
  }
}
0
likes
150
points
41
downloads

Publisher

unverified uploader

Weekly Downloads

A validator annotation for class. It will make easier for you to validate your model or DTO.

Repository (GitHub)
View/report issues

Topics

#validator #class-validator #build-runner #validator-generator #codegen

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

meta

More

Packages that depend on validator_annotation