toDartType method
Return a proper Dart type for this schema
Implementation
String toDartType({
Map<String, List<String>>? unions,
}) {
late String result;
switch (this) {
case SchemaObject(
anyOf: final anyOf,
nullable: final nullable,
ref: final ref,
properties: final properties,
):
if (anyOf != null && unions != null) {
final subSchemas = anyOf.map((e) => e.toDartType()).toList();
final leq = ListEquality();
for (final e in unions.entries) {
if (leq.equals(subSchemas, e.value)) {
final type = e.key.pascalCase;
if (nullable == true) {
result = '$type?';
} else {
result = type;
}
}
}
break;
} else if (ref != null) {
String type;
// Do not modify all uppercase schema names
if (ref == ref.toUpperCase()) {
type = ref;
} else {
type = ref.pascalCase;
}
if (nullable == true) {
result = '$type?';
} else {
result = type;
}
break;
} else if (properties != null || anyOf != null) {
result = 'Map<String,dynamic>';
break;
}
result = 'dynamic';
break;
case SchemaBoolean():
result = nullable == true ? 'bool?' : 'bool';
break;
case SchemaString():
result = nullable == true ? 'String?' : 'String';
case SchemaInteger():
result = nullable == true ? 'int?' : 'int';
case SchemaNumber():
result = nullable == true ? 'double?' : 'double';
case SchemaEnum():
result = ref ?? 'String';
case SchemaArray(items: final items):
final itemType = items.toDartType();
result = nullable == true ? 'List<$itemType>?' : 'List<$itemType>';
case SchemaMap(valueSchema: final valueSchema, nullable: final nullable):
String valueType = valueSchema?.toDartType() ?? 'dynamic';
if (valueType != 'dynamic' && valueSchema?.nullable == true) {
valueType = '$valueType?';
}
result = nullable == true
? 'Map<String,$valueType>?'
: 'Map<String,$valueType>';
}
return result;
}