validateAll method

  1. @override
JarResult validateAll(
  1. dynamic value, [
  2. Map<String, dynamic>? allValues,
  3. String? path,
  4. Object? root,
])
override

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);
}