jsonToDartDynamic function

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

Implementation

String jsonToDartDynamic(
  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;

""";
  String classData = """

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

""";
  String classDataCreate = """

  ${comment}
  factory ${className}.create({

""";
  String classDataCreateJson = """{


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

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

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

    if (value == null) {
      classMessage += textToFunctionDynamic(
        key: key,
        className: className,
        returnType: "Object",
        isClass: false,
        isList: false,
        comment: comment,
        callback: (text) {
          classData += text;
        },
        paramFunction: (text) {
          classDataCreate += text;
        },
        paramJson: (text) {
          classDataCreateJson += text;
        },
      );
    }
  });
  classDataCreateJson += "\n\n  }";
  classDataCreate += "})  {";
  classDataCreate += "\n\nreturn ${className}(${classDataCreateJson});";

  classDataCreate += "\n\n      }";
  classData += "\n\n    }";

  classMessage += classData;

  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
  }

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

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