castData method

dynamic castData(
  1. dynamic data,
  2. String type
)

Implementation

dynamic castData(dynamic data, String type) {
  if (data == null) return null;
  switch (type) {
    case "String":
      return data.toString();
    case "int":
      return int.parse("$data");
    case "double":
      return double.parse("$data");
    case "bool":
      return data.toString() == "true"
          ? true
          : data.toString() == "false"
              ? false
              : null;
  }
  if (type.length > 4 ? type.substring(0, 4) == "List" : false) {
    if (data == null || data.length == 0) {
      return List.empty(growable: true);
    } else {
      if (type.length > 5) {
        switch (type.substring(5, type.length - 1)) {
          case "String":
            return List<String? /*!*/ >.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "int":
            return List<int?>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "double":
            return List<double?>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "bool":
            return List<bool?>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "List<String>":
            return List<List<String>?>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "List<int>":
            return List<List<int?>>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "List<double>":
            return List<List<double?>>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
          case "List<bool>":
            return List<List<bool>?>.generate(
                data.length,
                (index) => castData(
                    data[index], type.substring(5, type.length - 1)));
        }
        return List.generate(
            data.length,
            (index) =>
                castData(data[index], type.substring(5, type.length - 1)));
      }
    }
  } else {
    if (debug) print("cast - not happened val $data type $type");
    return data;
  }
}