convert method

Future<void> convert(
  1. String jsonString
)

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();
}