jsonToDartStatic function

String jsonToDartStatic(
  1. Map<String, dynamic> data, {
  2. String className = "Root",
  3. bool isMain = true,
  4. bool isUseClassName = false,
  5. String? comment,
})

Implementation

String jsonToDartStatic(
  Map<String, dynamic> data, {
  String className = "Root",
  bool isMain = true,
  bool isUseClassName = false,
  String? comment,
}) {
  comment ??= "";
  List<String> classMessages = [];
  String classMessage = """
${((isMain) ? "// ignore_for_file: non_constant_identifier_names\nimport 'dart:convert';" : "")}


${comment}
class ${className} {
  Map rawData;

  ${comment}
  ${className}(this.rawData);

  static Map get defaultData {
    return ${json.encode(data)};
  }
""";

  String classDataCreate = """

  ${comment}
  static ${className} create({

""";
  String classDataCreateJson = """
    Map jsonData = ${className}.defaultData;
    Map jsonCreate = {

""";
  data.forEach((key, value) {
    String nameClass = key.camelCaseClass();
    if (isUseClassName) {
      nameClass = "${className}${key.camelCaseClass()}";
    }

    if (value is String) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "String",
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    }
    if (value is int) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "int",
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    } else if (value is double) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "double",
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    } else if (value is num) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "num",
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    }
    if (value is bool) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "bool",
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    }
    if (value is Map) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "Map",
        isClass: true,
        isUseClassName: isUseClassName,
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
      classMessages.add(
        jsonToDart(
          value.cast<String, dynamic>(),
          className: nameClass,
          isMain: false,
          isUseClassName: isUseClassName,
          comment: comment,
        ).first,
      );
    }

    if (value is List) {
      if (value.isNotEmpty) {
        if (value.first is Map) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "Map",
            isClass: true,
            isUseClassName: isUseClassName,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
          classMessages.add(jsonToDart(
                  (value.first as Map).cast<String, dynamic>(),
                  className: nameClass,
                  isMain: false,
                  isUseClassName: isUseClassName,
                  comment: comment)
              .first);
        }
        if (value.first is bool) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "bool",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        }
        if (value.first is String) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "String",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        }
        if (value.first is int) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "int",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        } else if (value.first is double) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "double",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        } else if (value.first is num) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "num",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        }
        if (value.first == null) {
          classMessage += textToFunction(
            key: key,
            className: className,
            returnType: "Object",
            isClass: false,
            isList: true,
            comment: comment,
            paramFunction: (text) {
              classDataCreate += text;
            },
            paramJson: (text) {
              classDataCreateJson += text;
            },
          );
        }
      } else {
        classMessage += textToFunction(
          key: key,
          className: className,
          returnType: "Object",
          isClass: false,
          isList: true,
          comment: comment,
          paramFunction: (text) {
            classDataCreate += text;
          },
          paramJson: (text) {
            classDataCreateJson += text;
          },
        );
      }
    }

    if (value == null) {
      classMessage += textToFunction(
        key: key,
        className: className,
        returnType: "Object",
        isClass: false,
        isList: false,
        comment: comment,
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    }
  });

  classDataCreateJson += "\n\n  };";
  classDataCreate += "})  {";
  classDataCreate += """
${classDataCreateJson}


    jsonCreate.forEach((key, value) {
      try {
        if (value != null) {
          jsonData[key] = value;
        }
      } catch (e, stack) {
        print("${className} \${e.toString()}, \${stack.toString()}");
      }
    });
return ${className}(jsonData);""";

  classDataCreate += "\n\n      }";

  classMessage += classDataCreate;

  classMessage += """

  /// operator map data
   operator [](key) {
    return rawData[key];
  }

  /// operator map data
  void operator []=(key, value) {
    rawData[key] = value;
  }

  /// return original data json
  Map toMap() {
    return rawData;
  }

  /// return original data json
  Map toJson() {
    return rawData;
  }

  /// return string data encode json original data
  @override
  String toString() {
    return json.encode(rawData);
  }
}""";

  classMessage += "\n\n${classMessages.join("\n\n")}";
  return classMessage;
}