validateAll method
Implementation
@override
JarResult validateAll(dynamic value,
[Map<String, dynamic>? allValues, String? path, Object? root]) {
final effectiveRoot = root ?? value;
if (value == null) {
return super.validateAll(null, allValues, path, effectiveRoot);
}
if (value is! List) {
return JarResult(
isValid: false,
error: 'Expected a list',
issues: [
JarIssue(path: path, code: 'invalid_type', message: 'Expected a list')
],
);
}
List<T>? typedList;
try {
typedList = List<T>.from(value);
} catch (e) {
const message = 'Failed to convert list to required type';
return JarResult(
isValid: false,
error: message,
issues: [JarIssue(path: path, code: 'invalid_type', message: message)],
);
}
final listResult =
super.validateAll(typedList, allValues, path, effectiveRoot);
final issues = <JarIssue>[];
issues.addAll(listResult.issues);
final workingList =
listResult.value is List ? listResult.value as List : typedList;
final output = [];
final hasElements = workingList.isNotEmpty && elementSchema != null;
if (hasElements) {
for (var i = 0; i < workingList.length; i++) {
final childPath = path == null ? '$i' : '$path.$i';
final elementResult = elementSchema!
.validateAll(workingList[i], allValues, childPath, effectiveRoot);
output.add(elementResult.value);
issues.addAll(elementResult.issues);
}
}
final outputValue = hasElements ? output : workingList;
if (issues.isEmpty) return JarResult.success(outputValue);
return JarResult(
isValid: false,
error: issues.first.message,
issues: issues,
value: outputValue);
}