convert method
Start the conversion process
jsonString
- the json that needs converting as a string
Implementation
Future<void> convert(String jsonString) async {
// make sure the jsonString is not empty
assert(jsonString.isNotEmpty);
// open the destination file
final output = File('$outputDirectory/${name}_model.dart').openWrite();
// create the attribute map
final attributeMap = _generateAttributeMap(jsonString);
// generate a simple header
output.writeln("// auto generated file");
output.writeln("// generated - ${DateTime.now().toString()} ");
// Add in any required imports
if (imports.isNotEmpty) {
for (final import in imports) {
output.writeln(import);
}
}
// Start class definition
output.writeln("");
output.writeln("class ${ConversionUtils.createModelName(name)} {");
output.writeln("");
// create attributes
attributeMap.forEach((key, value) {
final canBeNull = (allAttributesRequired) ? "" : "?";
output.writeln(
"\tfinal ${value.type}${(value.cast != null) ? '<${value.cast}>' : ''}$canBeNull ${ConversionUtils.prepName(key)};");
});
output.writeln("");
// create the constructor
output.writeln("\t${ConversionUtils.createModelName(name)}({");
attributeMap.forEach((key, value) {
final canBeNull = (allAttributesRequired) ? "required" : "";
output.writeln("\t\t $canBeNull this.${ConversionUtils.prepName(key)},");
});
output.writeln("\t});\n");
// create the static converter for the json object
output.writeln(
"\tstatic ${ConversionUtils.createModelName(name)} fromJson(Map<String,dynamic> json){");
output.writeln("\t\treturn ${ConversionUtils.createModelName(name)}(");
attributeMap.forEach((key, value) {
if (value.type == "List" &&
value.cast != null &&
value.cast!.contains("Model")) {
output.writeln(
"\t\t\t${ConversionUtils.prepName(key)}: (json['$key'] != null) ? json['$key'].map<${value.cast}>((json) => ${value.cast}.fromJson(json)).toList() : json['$key'],");
} else {
if (_isSubType(value.type)) {
output.writeln(
"\t\t\t${ConversionUtils.prepName(key)}: ${value.type}.fromJson(json['$key']),");
} else {
output
.writeln("\t\t\t${ConversionUtils.prepName(key)}: json['$key'],");
}
}
});
output.writeln("\t\t);");
output.writeln("\t}");
// tidy up and close file
output.writeln("}");
await output.flush();
output.close();
}