1
resposta

TimeoutException não aparece

Olá

Estou com um problema no tratamento do erro de TimeoutException. Alterei o endereço de IP do http, e no console aparece a seguinte mensagem:

E/flutter ( 3414): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: SocketException: OS Error: No route to host, errno = 113, address = 192.168.13.12, port = 51648

Entretanto, o showDialog com o 'timeout submitting the transaction' não aparece. Abaixo segue o código do transaction_form

void _save(Transaction transactionCreated, String password, BuildContext context) async {
    final Transaction? transaction = await _webClient.save(transactionCreated, password).catchError((e) {
      showDialog(
          context: context,
          builder: (contextDialog) {
            return FailureDialog('timeout submitting the transaction');
          });
    }, test: (e) => e is TimeoutException).catchError((e) {
      showDialog(
          context: context,
          builder: (contextDialog) {
            return FailureDialog(e.message);
          });
    }, test: (e) => e is HttpException);

    if (transaction != null) {
      await showDialog(
          context: context,
          builder: (contextDialog) {
            return SuccessDialog('successful transaction');
          }).then((value) => Navigator.pop(context));
    }
  }
}

E aqui como está meu transaction_webclient

 final Response response = await client
        .post(Uri.http('192.168.13.12:8080', 'transactions'),
            headers: {
              'Content-type': 'application/json',
              'password': password,
            },
            body: transactionJson)
        .timeout(Duration(seconds: 5));

Alguém mais está com o mesmo problema?

1 resposta

Aqui, o TimeoutException não deu certo. Mas eu coloquei como SocketException e funcionou da maneira esperada, só não sei se é da maneira correta. Segue o código que fiz no save do transaction_form.dart:

await _webClient.save(transactionCreated, password).catchError((e) {
      showDialog(
          context: context,
          builder: (contextDialog) {
            return FailureDialog(e.message);
          });
    }, test: (e) => e is HttpException).catchError((e) {
      showDialog(
          context: context,
          builder: (contextDialog) {
            return FailureDialog('timeout submitting the transaction');
          });
    }, test: (e) => e is SocketException);