tryParse static method
- 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;
}