generate method

Future<void> generate(
  1. List<String> args
)

Implementation

Future<void> generate(List<String> args) async {
  print("Flutter Model Generator");
  print("------------------------");

  final url = _readUrl(args);

  if (url == null) {
    throw Exception("Missing --url");
  }

  final json = await _client.get(url);

  final schema = SchemaBuilder();

  // ---------------------------------------------
  // Generate model name from URL
  // ---------------------------------------------

  final className = NameUtils.classNameFromUrl(url);

  final fileName = NameUtils.fileNameFromClassName(className);

  print("Model: $className");
  print("File: $fileName.dart");

  // ---------------------------------------------
  // Build schema
  // ---------------------------------------------

  DartClass root;

  if (json is List) {
    root = schema.buildFromList(
      className: "$className"
          "ApiResponse",
      jsonList: json,
    );
  } else if (json is Map<String, dynamic>) {
    root = schema.buildFromMap(
      className: "$className"
          "ApiResponse",
      json: json,
    );
  } else {
    throw Exception(
      "Unsupported API response type: "
      "${json.runtimeType}",
    );
  }

  // ---------------------------------------------
  // Generate Dart code
  // ---------------------------------------------

  final builder = ClassBuilder();

  final writer = FileWriter();

  await writer.write(
    directory: "lib/models",
    fileName: "$fileName"
        "ApiResponse.dart",
    content: builder.buildFile(root),
  );

  print(
    "✔ Generated: lib/models/$fileName"
    "ApiResponse.dart",
  );

  print("Done!");
}