Skip to main content

Errors and localization

Localization​

ZodArt provides various localized error messages for build in parsing and validations. Default language is set to English, to change it use ZLocalizationContext.current

Currently supported languages are:

  • English
  • Czech
  • Japanese

Custom error handling​

ZodArt contains various helpers for error handling, see documentation for more info

Example​

See full example.

import 'package:zodart/zodart.dart';

part 'localization.zodart.dart';
part 'localization.zodart.type.dart';

/// Schema defined using ZodArt (generates [Person] class)
.generateNewClass(outputClassName: 'Person')
abstract class PersonSchema {
/// Validates that:
/// - `firstName` is from 1 to 20 characters long
/// - `lastName` is from 1 to 30 characters long
/// - `age` is ≥ 0 (optional)
static final schema = (
firstName: ZString().min(1).max(20),
lastName: ZString().min(1).max(30),
age: ZInt().optional().min(0),
);

static const z = _PersonSchemaUtils();
static final ZObject<Person> zObject = z.zObject;
}

void main() {
final result = PersonSchema.zObject.parse({'firstName': '', 'lastName': 'Art', 'age': -1});

// Prints an English error message summary (default)
print(result.issueSummary);

// Change localization to Czech (see other supported languages)
ZLocalizationContext.current = ZIssueLocalizationService(Language.cs);

// Prints error message summary in Czech
print(result.issueSummary);

// To get the individual localized message strings
final messages = result.issueMessages;
print(messages);

// Each issue is represented by a `ZIssue` instance
final zIssues = result.rawIssues;

// Custom translation logic using pattern matching (Dart 3+)
final customMessages =
zIssues?.map((zIssue) {
return switch (zIssue) {
ZIssueMinNotMet(:final min, :final val) => 'My custom message: $val is lower than $min!',
_ => 'My custom message: Other problem',
};
}) ??
[];

print('\nCustom messages:');
print(customMessages);

// To get error message summary only for the 'age' property
print('\nMessage for the age field:');
print(result.getSummaryFor(PersonSchema.z.props.age.name));
}