pegarCidade static method

Future<Cidade?> pegarCidade(
  1. dynamic nomeCidadeOuIBGE, [
  2. dynamic nomeEstadoOuUFOuIBGEouRegiao
])

Retorna a cidade correspondente ao nome da cidade ou ao código IBGE da cidade.

A função pegarCidade recebe o nome da cidade ou o código IBGE da cidade como parâmetro e retorna a cidade correspondente.

Parâmetros:

  • nomeCidadeOuIBGE: O nome da cidade ou o código IBGE da cidade.
  • nomeOuUFOuIBGE (opcional): O nome do estado ou o código IBGE do estado. Quando especificado, limita a busca da cidade apenas ao estado informado.

Retorna:

  • Um objeto do tipo Cidade correspondente à cidade encontrada.
  • null se nenhuma cidade for encontrada.

Implementation

static Future<Cidade?> pegarCidade(dynamic nomeCidadeOuIBGE, [dynamic nomeEstadoOuUFOuIBGEouRegiao]) async {
  if (nomeCidadeOuIBGE is Cidade) {
    return nomeCidadeOuIBGE;
  }

  var cids = (await cidades).toList();

  if (nomeEstadoOuUFOuIBGEouRegiao is Cidade) {
    nomeEstadoOuUFOuIBGEouRegiao = nomeEstadoOuUFOuIBGEouRegiao.estado;
  }

  if (nomeEstadoOuUFOuIBGEouRegiao is Estado) {
    nomeEstadoOuUFOuIBGEouRegiao = nomeEstadoOuUFOuIBGEouRegiao.ibge;
  }

  if (nomeEstadoOuUFOuIBGEouRegiao is Regiao) {
    nomeEstadoOuUFOuIBGEouRegiao = null;
    cids = (await (nomeCidadeOuIBGE as Regiao).cidades).toList();
  }

  if (nomeEstadoOuUFOuIBGEouRegiao is num || nomeEstadoOuUFOuIBGEouRegiao is int || nomeEstadoOuUFOuIBGEouRegiao is double) {
    nomeEstadoOuUFOuIBGEouRegiao = nomeEstadoOuUFOuIBGEouRegiao.toString().first(2);
  }

  nomeCidadeOuIBGE = flatString(nomeCidadeOuIBGE);

  if ("$nomeCidadeOuIBGE".flatContains(" - ")) {
    var l = "$nomeCidadeOuIBGE".split(" - ").whereValid.toList();
    nomeCidadeOuIBGE = l.first;
    if (l.length > 1) {
      nomeEstadoOuUFOuIBGEouRegiao ??= l[1];
    }
  }

  Estado est = pegarEstado(nomeCidadeOuIBGE);
  if (est.estadoReal == false && isValid(nomeEstadoOuUFOuIBGEouRegiao)) {
    est = pegarEstado(nomeEstadoOuUFOuIBGEouRegiao);
    cids.removeWhere((c) => c.estado.ibge != est.ibge);
  }

  return cids.singleWhereOrNull((x) => x.nome.flatEqual(nomeCidadeOuIBGE) || x.ibge.toString() == nomeCidadeOuIBGE.toString());
}