call method

Future<ProprietarioDetran> call(
  1. String placa,
  2. int? codOrgaoAutuador,
  3. String? sgUf
)

Implementation

Future<ProprietarioDetran> call(
    String placa, int? codOrgaoAutuador, String? sgUf) async {
  if (!licencePlateCarRegex.hasMatch(placa)) {
    throw InvalidFormException(
        message: 'A placa não segue o padrão esperado');
  }
  String orgadoAutuador = '';
  if (codOrgaoAutuador != null) {
    orgadoAutuador = '/$codOrgaoAutuador';
  }
  String ufPesquisa = '';
  if (sgUf != null) {
    ufPesquisa = '&sgUf=$sgUf';
  }
  final response = await httpClient
      .get('$orgadoAutuador/detran?nrPlaca=$placa$ufPesquisa');

  var entries = response
      .asXml()
      .descendantElements
      .where((node) =>
          (node.children.firstOrNull is XmlText || node.children.isEmpty) &&
          node.depth == 5)
      .map((node) => MapEntry(node.name.toString(),
          (node.innerText.isEmpty ? null : node.innerText)));
  var map = Map.fromEntries(entries);
  if (map.containsKey('codigoRetExec') && map['codigoRetExec'] != '0') {
    if (map['messageError'] == 'Orgao nao registrado') {
      throw OrgaoNaoRegistradoException(message: map['messageError'] ?? '');
    }
    throw NotFoundException(message: map['messageError'] ?? '');
  }
  return ProprietarioDetran.fromJson(map);
}