dup 2.0.0
dup: ^2.0.0 copied to clipboard
A powerful, flexible schema-based validation library for Dart, inspired by JavaScript's yup.
Changelog #
2.0.0 - 2026-04-24 #
Breaking Changes #
BaseValidatorSchemaremoved — replaced byDupSchema, which unifies schema definition and validation into a single class (no moreuseUiFormglobal service).useUiFormremoved — callschema.validate(data)directly.FormValidationExceptionremoved — validation no longer throws;schema.validate()returnsFormValidationResult(eitherFormValidationSuccessorFormValidationFailure).addValidatorcallback return type changed fromString?toValidationFailure?.ValidatorLocaleconstructor redesigned — takes a singleMap<ValidationCode, MessageFactory>instead ofmixed:,number:,string:,array:named parameters with plain-string keys.ValidateNumber.moreThan()/lessThan()removed — usemin()/max()orsatisfy()for strict comparisons.ValidateString.mobile()renamed tokoMobile()— reflects Korean-specific scope.ValidateString.phone()renamed tokoPhone()— reflects Korean-specific scope.
See MIGRATING.md for a complete before/after guide.
Added #
DupSchema— replacesBaseValidatorSchema+useUiFormpair; supportsvalidate()(async),validateSync(),validateParallel(),validateField(), andcrossValidate().DupSchema.validateParallel()— runs all field validators concurrently viaFuture.wait; faster thanvalidate()when multiple async validators (e.g. DB uniqueness checks) are registered.DupSchema.when()— conditional validation; replaces base validators when a field satisfies a predicate at validation time.DupSchema.pick(fields)/omit(fields)— derive a sub-schema from an existing one without duplicating validator definitions.DupSchema.partial()— returns a new schema that skips allrequiredchecks; useful for PATCH-style partial updates.FormValidationResultsealed class (FormValidationSuccess,FormValidationFailure) returned fromDupSchema.validate()andDupSchema.validateSync().FormValidationFailure— call operator,hasError(),fields,firstField.ValidationCodeenum — type-safe key for every built-in rule; stored inValidationFailure.codeand used as locale map keys.ValidationResultsealed class (ValidationSuccess,ValidationFailure) returned from every single-fieldvalidate()/validateAsync()call.ValidateBool— new validator type withisTrue()andisFalse().ValidateDateTime— new validator type withisBefore(),isAfter(),min(),max(),between(),isInFuture(),isInPast(),isWeekday(),isWeekend(),isSameDay(),isToday(),isWithin().ValidateObject— nested object validator; errors are flattened with dot notation (result('address.city')).ValidateMap<V>— map validator withkeyValidator(),valueValidator(),minSize(),maxSize(); errors are flattened with bracket notation (result('scores[math]')).ValidateNumber.toValidator({parseErrorMessage})— parses a string input as a number before validating; returns a parse error for non-numeric input (e.g."abc","17세"); directly usable asTextFormField.validator.ValidateNumberadditions:isPositive(),isNegative(),isNonNegative(),isNonPositive(),isEven(),isOdd(),isMultipleOf(),between(),isPrecision(digits),isPort(). Note: the correspondingValidationCodeenum value isValidationCode.port(noun form), notValidationCode.isPort.ValidateListadditions:hasLength(),all(),any(),none(),hasNoDuplicates(),eachItem(),containsAll().ValidateStringadditions:startsWith(),endsWith(),contains(),ipAddress(),hexColor(),base64(),json(),creditCard(),koPostalCode().DupSchema.crossValidate()— cross-field validation called only when all individual fields pass.- Phase-based execution (0 = required, 1 = format, 2 = constraint, 3 = custom, 4 = async) — chain order never affects which rule fires first.
1.0.4 - 2025-06-19 #
Added #
- ValidateList: Comprehensive list/array validation support[1][2]
- Length validation methods:
minLength(),maxLength(),lengthBetween(),hasLength() - Content validation:
contains(),doesNotContain(),hasNoDuplicates() - State validation:
isNotEmpty(),isEmpty() - Conditional validation:
all(),any(),eachItem()
- Length validation methods:
- Global localization support for list validation messages
- Enhanced documentation with detailed ValidateList examples and usage patterns
- Custom extension validator examples for lists
Changed #
- Updated README with comprehensive ValidateList documentation and examples
- Improved API consistency across all validator types
- Enhanced error message customization for array/list validations
Fixed #
- Corrected property name reference from
listtoarrayin ValidatorLocale integration
1.0.3 - 2025-05-20 #
Added #
- Improved documentation and README.
- Added a complete example project for easier usage reference.
- Extension method support for custom validators.
- Global and per-field custom error message customization.
- Localization and multi-language message support.
Changed #
- Refined schema-based validation API for better usability.
- Enhanced error handling and message customization logic.
Fixed #
- Minor bug fixes in validation logic.