parse method
Parse a complete JSON Schema to list of properties.
Implementation
List<JsonSchemaProperty> parse(Map<String, dynamic> schema) {
final requiredFields =
(schema['required'] as List?)?.cast<String>() ?? <String>[];
final properties =
schema['properties'] as Map<String, dynamic>? ?? <String, dynamic>{};
// Extract definitions for $ref resolution
final defs = schema['\$defs'] as Map<String, dynamic>? ??
schema['definitions'] as Map<String, dynamic>? ??
definitions;
final result = <JsonSchemaProperty>[];
for (final entry in properties.entries) {
final prop = _parseProperty(
entry.key,
entry.value as Map<String, dynamic>,
requiredFields.contains(entry.key),
defs,
uiSchema[entry.key] as Map<String, dynamic>? ?? const {},
);
if (prop != null && !prop.uiHidden) {
result.add(prop);
}
}
// Sort by ui:order if specified
result.sort((a, b) {
final orderA = a.uiOrder ?? 999;
final orderB = b.uiOrder ?? 999;
return orderA.compareTo(orderB);
});
return result;
}