generateFromJsonCode static method
Generates Dart models from a raw jsonCode string.
rootClassName: The name of the main model class (e.g., "UserProfile").
jsonCode: The raw JSON string to analyze.
outputDir: The base directory where models should be generated (e.g., "lib/models").
This method is asynchronous and returns a Future that completes when
all files have been written to the outputDir.
Implementation
static Future<void> generateFromJsonCode({
required String rootClassName,
required String jsonCode,
required String outputDir,
}) async {
final analyzer = TypeAnalyzer();
final dynamic json = jsonDecode(jsonCode);
analyzer.analyze(json, rootClassName);
final emitter = FileEmitter();
final folderName = ReCase(rootClassName).snakeCase;
final targetDir = Directory(p.join(outputDir, folderName));
if (!await targetDir.exists()) {
await targetDir.create(recursive: true);
}
// Generate model files
for (var classDef in analyzer.classes.values) {
final fileName = "${ReCase(classDef.name).snakeCase}.dart";
final filePath = p.join(targetDir.path, fileName);
final content = emitter.emitClass(classDef);
await File(filePath).writeAsString(content);
}
// Generate models.dart barrel file
final barrelFile = File(p.join(targetDir.path, "models.dart"));
final barrelContent = StringBuffer();
for (var classDef in analyzer.classes.values) {
barrelContent.writeln(
"export '${ReCase(classDef.name).snakeCase}.dart';",
);
}
await barrelFile.writeAsString(barrelContent.toString());
// ignore: avoid_print
print("✅ Generated ${analyzer.classes.length} models in ${targetDir.path}");
}