Let's take this Username modddel again as an example :
The 'form' validationStep contains two validations : 'length' validation and 'characters' validation. The 'availability' validationStep contains only one validation : 'reserved' validation.
You can easily access the failure(s) of an invalid-step union-case :
username.mapOrNull(
invalidAvailability: (invalidUsernameAvailability) {
/// InvalidUsernameAvailability has only one validation, and thus only one
/// failure that it can hold.
///
/// For this reason, the failure is not nullable.
///
UsernameReservedFailure failure = invalidUsernameAvailability.reservedFailure;
},
invalidForm: (invalidUsernameForm) {
/// InvalidUsernameForm has two validations, and thus can hold one or two
/// failures.
///
/// For this reason, the failures are nullable.
///
UsernameCharactersFailure? failure1 = invalidUsernameForm.charactersFailure;
UsernameLengthFailure? failure2 = invalidUsernameForm.lengthFailure;
/// You can use the "hasFailure" getters to check if the invalid-step
/// union-case has a particular failure.
///
if (invalidUsernameForm.hasCharactersFailure) {
// At this point, the charactersFailure is not null.
final failure = invalidUsernameForm.charactersFailure!;
}
if (invalidUsernameForm.hasLengthFailure) {
// At this point, the lengthFailure is not null.
final failure = invalidUsernameForm.lengthFailure!;
}
},
);
You can also access a list of all the failures of an invalid union-case, using the failures getter :
username.mapValidity(
valid: (validUsername) {},
invalid: (invalidUsername) {
/// We can access the list of failures from the abstract invalid union-case
///
final failures = invalidUsername.failures;
/// We can also access it from each invalid-step union-case
///
invalidUsername.mapOrNull(
invalidForm: (invalidUsernameForm) {
final failures = invalidUsernameForm.failures;
},
);
},
);