textToFunctionIsar function

String textToFunctionIsar({
  1. required String key,
  2. required dynamic value,
  3. required String returnType,
  4. required String className,
  5. bool isClass = false,
  6. bool isList = false,
  7. bool isUseClassName = false,
  8. String? comment,
  9. required void callback(
    1. String text
    ),
  10. required void paramFunction(
    1. String text
    ),
  11. required void paramJson(
    1. String text
    ),
  12. required void operatorData(
    1. String text
    ),
})

Implementation

String textToFunctionIsar({
  required String key,
  required value,
  required String returnType,
  required String className,
  bool isClass = false,
  bool isList = false,
  bool isUseClassName = false,
  String? comment,
  required void Function(String text) callback,
  required void Function(String text) paramFunction,
  required void Function(String text) paramJson,
  required void Function(String text) operatorData,
}) {
  comment ??= "";
  if (value is String) {
    value = json.encode(value);
  }
  String nameClass = key.camelCaseClass();
  if (isUseClassName) {
    nameClass = "${className}${key.camelCaseClass()}";
  }

  String nameMethod = key
      .replaceAll(RegExp(r"^(@|[0-9]+)", caseSensitive: false), "special_")
      .replaceAll(RegExp(r"([\-]+)", caseSensitive: false), "_")
      .replaceAll(RegExp(r"^(_)", caseSensitive: false), "special_");
  if (RegExp(r"^(do|is|in)$", caseSensitive: false).hasMatch(nameMethod)) {
    nameMethod += "_";
  }

//   operatorData.call("""

//     if (key == "${key}") {
//       ${nameMethod} = value;
//     }

// """);

  if (isClass) {
    if (isList) {
      operatorData.call("""


    if (key == "${key}") {
      if (value is List<${nameClass}>) {
        ${nameMethod} = value;
      } else {

        ${nameMethod} = (value as List).map((state_data_procces) {
          ${nameClass} state_value_procces = ${nameClass}();
          (state_data_procces as Map).forEach((key, value) {
            state_value_procces[key] = value;
          });
          return state_value_procces;
        }).toList().cast<${nameClass}>();

      }
    }


""");
      paramFunction.call("""
      List<${nameClass}?>? ${nameMethod},
""");
      // paramJson.call("""
      // "${key}": (${nameMethod} != null)?${nameMethod}.map((res) => res.toJson()).toList().cast<Map>():null,
// """);
      paramJson.call("""
      "${key}":  ${nameMethod}.map((res) => res.toJson()).toList().cast<Map>(),
""");
      callback.call("""
      try {
        if (rawData["${key}"] is List == false){
          ${nameMethod}  = null;
        }
        ${nameMethod} = (rawData["${key}"] as List).map((e) => ${nameClass}(e as $returnType)).toList().cast<${nameClass}>();
      } catch (e) {
        ${nameMethod}  = null;
      }
""");
      return """
  ${comment}
  List<${nameClass}> ${nameMethod} = [];

""";
    }
    operatorData.call("""

    if (key == "${key}") {
      if (value is ${nameClass}) {
        ${nameMethod} = value;
      } else {
        ${nameClass} state_value_procces = ${nameClass}();
        (value as Map).forEach((key, value) {
          state_value_procces[key] = value;
        });
        ${nameMethod} = state_value_procces;
      }
    }


""");
    paramFunction.call("""
      ${nameClass}? ${nameMethod},
""");
    // paramJson.call("""
    // "${key}": (${nameMethod} != null)?${nameMethod}.toJson(): null,
// """);
    paramJson.call("""
      "${key}":  ${nameMethod}.toJson(),
""");
    callback.call("""
      try {
        if (rawData["${key}"] is ${returnType} == false){
          ${nameMethod}  =  ${nameClass}({});
        }
        ${nameMethod} = ${nameClass}(rawData["${key}"] as $returnType);
      } catch (e) {
        ${nameMethod}  = ${nameClass}({});
      }
""");
    return """

  ${comment}
  ${nameClass} ${nameMethod} = ${nameClass}();

""";
  }

  operatorData.call("""


    if (key == "${key}") {
      ${nameMethod} = value;
    }


""");

  if (isList) {
    paramFunction.call("""
      List<${returnType}?>? ${nameMethod},
""");
    paramJson.call("""
      "${key}": ${nameMethod},
""");
    callback.call("""
      try {
        if (rawData["${key}"] is List == false){
          ${nameMethod}  = null;
        }
        ${nameMethod} = (rawData["${key}"] as List).cast<${returnType}>();
      } catch (e) {
        ${nameMethod}  = null;
      }
""");
    return """

  ${comment}
  List<${returnType}> ${nameMethod} = ${value};

""";
  }

  paramFunction.call("""
    $returnType? ${nameMethod},
""");
  paramJson.call("""
      "${key}": ${nameMethod},
""");
  callback.call("""
      try {
        if (rawData["${key}"] is ${returnType} == false){
          ${nameMethod}  = null;
        }
        ${nameMethod} = rawData["${key}"] as ${returnType};
      } catch (e) {
        ${nameMethod}  = null;
      }
""");
  return """

  ${comment}
  $returnType ${nameMethod} = ${value};

""";
}