Estou aplicando o que aprendi no curso para iniciar um projeto mobile da empreso que trabalho, fazendo requisições a uma API em ".net".
Mas quando faço as requisições a API, com as mesmas configurações de um projeto já existente para web, que consome da mesma API, a requisição simplesmente não é completada, e tambem não retorna nenhum erro HTTP, só retorna uma Unhadled Exception:
, sem nenhum detalhamento depois, utilizei o cathcError
e deu pra ver só que era uma instância de ClientException
sem nenhum texo no message
e com a propridade url: <url da requisição>
.
Estou usando um "Intercepor" como ensinado no curso, mas os únicos print's são os referentes à Requisição, não há retorno nenhum da função que resgata a Resposta. Código ao que me refiro:
class LoggingInterceptor implements InterceptorContract {
@override
Future<RequestData> interceptRequest({RequestData data}) async {
print('Request');
print('url: ${data.baseUrl}');
...
} // todos os prints ocorrem normalmente
@override
Future<ResponseData> interceptResponse({ResponseData data}) async {
// Nenhum desses print's é mostrado no console
print('Response');
print('status: ${data.statusCode}');
...
}
}
Estou utilizando a mesma estrutura de funções ensinada no curso para as requisições. Já testei o mesmo código mudando somente a URL e funcionou normalmente, por exemplo a API de localidades fornecida pelo IBGE, inclusive com um outro projeto a parte da empresa, e também funcionou sem problemas.
A única coisa de diferente que percebi que ocorre, fora do projeto em Flutter, é que quando acesso essa URL, a que não está funcionando no projeto, pelo navegador do celular aparece um popup com uma mensagem:
"nenhum certificado encontrado
O app chrome solicitou um certificado. ... ... O app identificou o servidor da solicitação como <dominio da empresa>:443, mas você só deve permitir acesso ao certificado caso confie no App"
Apesar de não aparecer nada relacionado a isso nos logs do Flutter eu acredito que tenha alguma coisa a ver com o problema.
Essa é a parte do código que está dando problema:
// os headers que são passados como parâmetro no Login:
// {
// 'Content-Type': 'application/json',
// 'Access-Control-Allow-Origin': '*',
// }
Future<Response> login(
Map<String, String> headers,
Map<String, String> params,
String endpoint,
) async {
String jsonParams = json.encode(params);
final response = await client.post(
Uri.https(baseURL, apiURL + endpoint),
headers: headers,
body: jsonParams,
);
if (response.statusCode == 200 || response.statusCode == 204)
return response;
throw HttpException(getMessage(response.statusCode));
}