Files
json2dart/lib/generator.dart
2018-08-07 15:14:39 +08:00

59 lines
1.6 KiB
Dart

import 'dart:convert';
import 'package:json2dart_serialization/template.dart';
class Generator {
String jsonString;
String fileName;
String entityName;
Generator(this.jsonString, this.fileName, [this.entityName]);
List<DefaultTemplate> templateList = [];
String makeDartCode() {
var entityName = this.entityName ?? "Entity";
DefaultTemplate template =
DefaultTemplate(srcJson: jsonString, className: entityName);
StringBuffer resultSb = StringBuffer();
templateList.add(template);
refreshTemplate(template);
resultSb.writeln(header);
templateList.forEach((template) {
resultSb.writeln(template.toString());
});
return resultSb.toString();
}
void refreshTemplate(DefaultTemplate template) {
var fieldList = template.fieldList;
bool needRefresh = false;
fieldList.forEach((filed) {
if (filed is MapField) {
// filed.typeString
DefaultTemplate template = DefaultTemplate(
srcJson: json.encode(filed.map), className: filed.typeString);
templateList.add(template);
refreshTemplate(template);
} else if (filed is ListField) {
if (filed.childIsObject) {
DefaultTemplate template = DefaultTemplate(
srcJson: json.encode(filed.list[0]), className: filed.typeName);
templateList.add(template);
refreshTemplate(template);
}
}
});
}
static const String importString =
"import 'package:json_annotation/json_annotation.dart';";
String get header => """$importString
part $fileName.g.dart;
""";
}