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