Last updated:
0 purchases
map validation
Map Validation Package #
O pacote Map Validation fornece uma maneira flexível e extensível de validar dados de um Map em Dart, inspirado no Joi.js. Permite criar esquemas de validação com suporte a tipos variados, mensagens de erro personalizadas e internacionalização.
Instalação #
Para adicionar o pacote ao seu projeto Dart, inclua a dependência no arquivo pubspec.yaml:
dependencies:
map_validation: ^1.0.0
copied to clipboard
Uso #
Definindo um Esquema de Validação
Crie um esquema de validação utilizando os validadores disponíveis. Aqui está um exemplo básico:
import 'package:map_validation/src/validators/boolean_validator.dart';
import 'package:map_validation/src/validators/date_validator.dart';
import 'package:map_validation/src/validators/number_validator.dart';
import 'package:map_validation/src/validation_schema.dart';
import 'package:map_validation/src/exceptions/validation_exception.dart';
void main() {
final schema = ValidatorSchema({
'is_active': BooleanValidator(
isRequired: true,
requiredMessage: 'O campo ativo é obrigatório.',
invalidMessage: 'O valor deve ser um booleano.',
),
'start_date': DateValidator(
minDate: DateTime(2023, 1, 1),
maxDate: DateTime(2024, 12, 31),
isRequired: true,
requiredMessage: 'A data de início é obrigatória.',
minDateMessage: 'A data deve ser após {minDate}.',
maxDateMessage: 'A data deve ser antes de {maxDate}.',
),
'total_amount': NumberValidator(
min: 10,
max: 1000,
isInteger: true,
isRequired: true,
requiredMessage: 'O valor total é obrigatório.',
minMessage: 'O valor deve ser pelo menos {min}.',
maxMessage: 'O valor não deve exceder {max}.',
),
'discount_code': NumberValidator(
isRequired: false, // Opcional
isInteger: false, // Pode ser decimal
min: 0,
max: 100,
minMessage: 'O desconto deve ser pelo menos {min}%',
maxMessage: 'O desconto não deve exceder {max}%',
),
}, locale: 'pt_BR');
final validData = {
'is_active': true,
'start_date': DateTime(2023, 6, 15),
'total_amount': 150,
'discount_code': 25,
};
final invalidData = {
'is_active': 'yes', // Tipo inválido
'start_date': DateTime(2025, 1, 1), // Fora do intervalo
'total_amount': 5, // Abaixo do mínimo
'discount_code': 150, // Acima do máximo
};
// Validando dados válidos
try {
schema.validate(validData);
print('Dados válidos: Nenhum erro');
} catch (e) {
if (e is ValidationException) {
print('Erros com dados válidos: ${e.errors}');
}
}
// Validando dados inválidos
try {
schema.validate(invalidData);
} catch (e) {
if (e is ValidationException) {
print('Erros com dados inválidos: ${e.errors}');
}
}
}
copied to clipboard
Validadores Disponíveis #
BooleanValidator Valida valores booleanos. Permite definir se o campo é obrigatório e mensagens de erro personalizadas.
import 'package:map_validation/src/validators/boolean_validator.dart';
final validator = BooleanValidator(
isRequired: true,
requiredMessage: 'O campo é obrigatório.',
invalidMessage: 'Deve ser um booleano.',
);
copied to clipboard
DateValidator Valida datas com suporte para valores mínimos e máximos, e mensagens de erro personalizadas.
import 'package:map_validation/src/validators/date_validator.dart';
final validator = DateValidator(
minDate: DateTime(2023, 1, 1),
maxDate: DateTime(2024, 12, 31),
isRequired: true,
requiredMessage: 'Data é obrigatória.',
minDateMessage: 'Data deve ser após {minDate}.',
maxDateMessage: 'Data deve ser antes de {maxDate}.',
);
copied to clipboard
NumberValidator Valida números com suporte para valores mínimos e máximos e se deve ser inteiro. Inclui mensagens de erro personalizadas.
import 'package:map_validation/src/validators/number_validator.dart';
final validator = NumberValidator(
min: 10,
max: 1000,
isInteger: true,
isRequired: true,
requiredMessage: 'Número é obrigatório.',
minMessage: 'Número deve ser pelo menos {min}.',
maxMessage: 'Número não deve exceder {max}.',
);
copied to clipboard
StringValidator Valida strings com suporte para comprimento mínimo/máximo e padrões regex. Inclui mensagens de erro personalizadas.
import 'package:map_validation/src/validators/string_validator.dart';
final validator = StringValidator(
minLength: 3,
maxLength: 30,
pattern: RegExp(r'^[a-zA-Z0-9_]+$'),
isRequired: true,
requiredMessage: 'O nome é obrigatório.',
minLengthMessage: 'O nome deve ter pelo menos {minLength} caracteres.',
maxLengthMessage: 'O nome deve ter no máximo {maxLength} caracteres.',
patternMessage: 'O nome deve conter apenas letras, números e sublinhados.',
);
copied to clipboard
ConditionalValidator Valida um campo com base em uma condição que depende de outro campo. Permite definir uma função condicional e mensagens de erro personalizadas.
import 'package:map_validation/src/validators/conditional_validator.dart';
final validator = ConditionalValidator<String, String>(
condition: (value, dependentValue, data) => value == dependentValue,
dependentValue: 'password',
errorMessageKey: 'repeat_password_mismatch',
customMessage: 'A confirmação da senha deve corresponder à senha.',
);
copied to clipboard
MultiValidator Valida um campo que pode receber mais de um tipo de valor exemplo campo númerico exemplo '123' ou 123.
import 'src/validators/multi_validator.dart';
import 'src/validators/string_validator.dart';
import 'src/validators/number_validator.dart';
void main() {
final multiValidator = MultiValidator([
StringValidator(minLength: 3),
NumberValidator(min: 10, max: 100)
]);
final value = '123'; // Pode ser uma string ou número
if (multiValidator.validate(value)) {
print('O valor é válido.');
} else {
print('Erros de validação: ${multiValidator.errors}');
}
}
copied to clipboard
Tratamento de Erros #
Os erros de validação são lançados como exceções ValidationException, contendo um mapa de erros para cada campo.
import 'package:map_validation/src/exceptions/validation_exception.dart';
try {
// Validar dados
} catch (e) {
if (e is ValidationException) {
print('Erros: ${e.errors}');
}
}
copied to clipboard
Licença #
Este pacote é licenciado sob uma Licença de Uso Restrito. Veja o arquivo LICENSE para mais detalhes.
Direitos Autorais #
© 2024 Fernando Maia. Todos os direitos reservados.
Termos de Uso #
A permissão é concedida apenas para uso pessoal ou não comercial conforme autorizado. Qualquer uso comercial, redistribuição ou modificação do software sem permissão prévia é estritamente proibido. Para obter uma licença comercial ou permissão para outros usos, entre em contato com Fernando Maia em [seu email].
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.