searchInfoByCep method
- required String cep,
- PostmonReturnType returnType = PostmonReturnType.json,
Envia uma request GET para a API POSTMON enviando uma String com cep sem formatação. É possivel especificar o tipo de retorno através da enumeração PostmonReturnType, podendo para este método ser json ou xml. Se não escolhido nenhum tipo de retorno o default será json.
Quando consultado um CEP de formato válido, por exemplo: "01001000" o método vai retornar um objeto PostmonCepInfo com todas as propriedades que foram encontradas setadas.
Quando consultado um CEP de formato inválido, por exemplo: "950100100"
(9 dígitos), "95010A10" (alfanumérico), "95010 10" (espaço), o código de
retorno da consulta será um 404 (Bad Request), o retorno conterá um
objeto PostmonCepInfo com todos os campos de valores nulos, a
propriedade PostmonCepInfo.error
setata com true e um campo com a
mensagem descrevendo o erro na propriedade PostmonCepInfo.errorMessage
.
Antes de acessar o webservice, valide o formato do CEP e certifique-se
que o mesmo possua {8} dígitos.
Quando consultado um CEP de formato válido, porém inexistente, por
exemplo: "99999999", o retorno conterá um
objeto PostmonCepInfo com todos os campos de valores nulos, a
propriedade PostmonCepInfo.error
setata com true e um campo com a
mensagem descrevendo o erro na propriedade PostmonCepInfo.errorMessage
.
Implementation
Future<Either<SearchCepError, PostmonCepInfo>> searchInfoByCep({
required String cep,
PostmonReturnType returnType = PostmonReturnType.json,
}) async {
if (cep.isEmpty || cep.length != 8) {
return left(const InvalidFormatError());
}
try {
final uri = Uri.parse(
'$baseUrl/$cep${returnType == PostmonReturnType.xml ? '?format=xml' : ''}');
final response = await _client.get(uri);
if (response.statusCode == ok) {
switch (returnType) {
case PostmonReturnType.json:
final decodedResponse = jsonDecode(response.body);
return right(
PostmonCepInfo.fromJson(decodedResponse as Map<String, dynamic>),
);
case PostmonReturnType.xml:
final body = response.body;
return right(PostmonCepInfo.fromXml(body));
}
}
return left(const InvalidCepError());
} on Exception {
return left(const NetworkError());
}
}