pesquisarCidade static method

Future<Iterable<Cidade>> pesquisarCidade(
  1. dynamic nomeCidadeOuIBGE, [
  2. dynamic nomeEstadoOuUFOuIBGEouRegiao,
  3. int minChars = 0,
  4. int levenshteinDistance = 0,
])

Pesquisa uma cidade pelo nome, código IBGE ou UF.

Retorna uma lista de cidades que correspondem ao critério de pesquisa. O parâmetro nomeCidadeOuIBGE pode ser o nome da cidade, o código IBGE da cidade ou uma combinação de ambos. O parâmetro nomeEstadoOuUFOuIBGEouRegiao é opcional e pode ser utilizado para especificar o nome do estado, a UF, o código IBGE da UF ou a região. Quando especificado, a busca se limita apenas ao estado (ou região) informado.

Exemplo de uso:

var cidades = await pesquisarCidade("São Paulo");

Implementation

static Future<Iterable<Cidade>> pesquisarCidade(dynamic nomeCidadeOuIBGE, [dynamic nomeEstadoOuUFOuIBGEouRegiao, int minChars = 0, int levenshteinDistance = 0]) async {
  try {
    if (nomeCidadeOuIBGE is Cidade) {
      return [nomeCidadeOuIBGE];
    }

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

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

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

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

    if (nomeCidadeOuIBGE is num) {
      nomeCidadeOuIBGE = nomeCidadeOuIBGE.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.search(
      searchTerms: nomeCidadeOuIBGE,
      searchOn: (x) => [x.nome, x.ibge],
      minChars: minChars,
      levenshteinDistance: levenshteinDistance,

    );
  } catch (e) {
    return [];
  }
}