tryParse static method

Future<Endereco> tryParse(
  1. string address
)

Tenta converter uma string em um endereço.

A conversão é feita a partir da string fornecida, que é analisada e dividida em partes. As partes são então usadas para preencher os campos do endereço.

Parâmetros: - address: A string com o endereço.

Retorna: - O endereço criado a partir da string.

Implementation

static Future<Endereco> tryParse(string address) async {
  string postalCode = "";
  string state = "";
  string city = "";
  string neighborhood = "";
  string complement = "";
  string number = "";
  address = address.fixText.removeLastAny([" ", ".", "-"]); // arruma os espacos do endereco
  var ceps = Brasil.procurarCEP(address); // procura ceps no endereco
  address = address.removeAny(ceps); // remove ceps
  address = address.fixText.removeLastAny([" ", ".", "-"]); // arruma os espacos do endereco
  if (ceps.isNotEmpty) {
    postalCode = Brasil.formatarCEP(ceps.first);
  }

  address = address.fixText.trimAny(["-", ",", "/", "."]); // arruma os espacos do endereco
  if (address.contains(" - ")) {
    var parts = address.split(" - ");
    if (parts.length == 1) {
      address = parts.first.ifBlank("").trimAny([" ", ",", "-", "."]);
    }

    if (parts.length == 2) {
      address = parts.first.ifBlank("");
      string maybeNeigh = parts.last.ifBlank("").trimAny([" ", ",", "-"]);
      if (maybeNeigh.length == 2) {
        state = maybeNeigh;
      } else {
        neighborhood = maybeNeigh;
      }
    }

    if (parts.length == 3) {
      address = parts.first.ifBlank("");
      string maybeCity = parts.last.ifBlank("").trimAny([" ", ",", "-"]);
      if (maybeCity.length == 2) {
        state = maybeCity;
      } else {
        city = maybeCity;
      }

      parts.removeLast();
      parts = parts.skip(1).toList();
      neighborhood = parts.firstOrDefault().ifBlank("")!.trimAny([" ", ",", "-"]);
    }

    if (parts.length == 6) {
      string ad = "${parts[0]}, ${parts[1]} ${parts[2]}";
      parts.removeAt(1);
      parts.removeAt(2);
      parts[0] = ad;
    }

    if (parts.length == 5) {
      string ad = "${parts[0]}, ${parts[1]}";
      parts.removeAt(1);
      parts[0] = ad;
    }

    if (parts.length == 4) {
      address = parts.first.ifBlank("");
      string maybeState = parts.last.ifBlank("").trimAny([" ", ",", "-"]);
      parts.removeLast();
      string maybeCity = parts.last.ifBlank("").trimAny([" ", ",", "-"]);
      parts.removeLast();
      city = maybeCity;
      state = maybeState;
      parts = parts.skip(1).toList();
      neighborhood = parts.firstOrDefault().ifBlank("")!.trimAny([" ", ",", "-"]);
    }
  }

  address = address.fixText;
  if (address.contains(",")) {
    var parts = address.after(",").splitAny([" ", ".", ","]).toList();
    number = parts.where((x) => x.flatEqual("s/n") || x.flatEqual("sn") || x.flatEqual("s") || x.flatEqual("sem") || x.isNumber).firstOrNull ?? "";
    parts.remove(number);
    complement = parts.join(" ");
    address = address.before(",");
  } else {
    var adparts = address.splitAny([" ", "-"]).toList();
    if (adparts.isNotEmpty) {
      string maybeNumber = adparts.where((x) => x.flatEqual("s/n") || x.flatEqual("sn") || x.isNumber).firstOrNull.ifBlank("")!.trimAny([" ", ","]);
      complement = adparts.join(" ").after(maybeNumber).trimAny([" ", ","]);
      number = maybeNumber;
      address = adparts.join(" ").before(maybeNumber).trimAny([" ", ","]);
    }
  }

  number = number.trimAll.trimAny([" ", ",", "-"]);
  complement = complement.trimAll.trimAny([" ", ",", "-"]);

  var d = Endereco(
    cep: postalCode,
    logradouro: address,
    numero: number,
    complemento: complement,
    bairro: neighborhood,
    cidade: await Cidade.pegar(city, state),
  );

  return d;
}