3
respostas

Socket Exception

Olá!

Enquanto estava fazendo as atividades das aulas eu notei uma coisa, eu não consigo testar os erros que estão sendo solicitados, porque sempre que rodo o meu código, caso a senha esteja errada o meu vscode trava a aplicação e dispara o seguinte error

Exception has occurred. SocketException (SocketException: OS Error: Connection refused, errno = 111, address = 192.168.1.66, port = 36171).

Então eu nunca consigo disparar os erros de status, além disso eu não consigo fazer uma operação de transferência com valores vazios porque o flutter automaticamente dispara um.

Exception caught by gesture Null check operator used on a null value.

Assim também não consigo disparar o erro de transação falha, pois a aplicação não permite, como eu poderia resolver esses dois problemas? ou adaptar o código para trabalhar com esses erros?

meu código da parte de save

import 'dart:convert';

import 'package:bytebank_version2/Model/Transaction.dart';
import 'package:bytebank_version2/Http/web_client.dart';
import 'package:http/http.dart';

class TransactionWebClient {
  Future<List<Transaction>> findAll() async {
    final Response response =
        await client.get(baseUrl).timeout(Duration(seconds: 5));
    List<dynamic> decodedJson = jsonDecode(response.body);
    return decodedJson
        .map((dynamic json) => Transaction.fromJson(json))
        .toList();
    ;
  }

  Future<Transaction> save(Transaction transaction, String password) async {
    final String transactionJson = jsonEncode(transaction.toJson());
    final Response response = await client.post(baseUrl,
        headers: {
          'Content-type': 'application/json',
          'password': password,
        },
        body: transactionJson);

    if (response.statusCode == 400) {
      throw Exception('There was a error submiting the transaction');
    }

    if (response.statusCode == 401) {
      throw Exception('Authentication Failed');
    }

    return Transaction.fromJson(jsonDecode(response.body));
  }
}
3 respostas

Olá, Você pode tentar usar o operador ? na hora de criar variavel - que basicamente significa que você está dizendo para o Dart que aquela váriavel pode ser null ou não. Depois na hora de usar a variável você usa o operador ! - você diz para o Dart que tem certeza que aquela varável não é nula

Ex:

 final Response? response = await client.post(Uri.parse(BASE_URL)

        if (response!.statusCode == 200) {
      return Transaction.fromJson(jsonDecode(response.body));
    }
    throw HttpException(_getMessage(response.statusCode));
  }

Olá tudo bem?

Eu tentei sua solução e continua com o mesmo problema.

Eu nunca consigo disparar os erros do throw exception, quando eu tento mandar um valor vazio de transação ele da excepction caused by gesture.

Quando eu coloco uma senha para a transferência errada, ele dispara o socket exception e desliga a conexão com o emulador.

Olá Luis, boa tarde. Tudo bom?

Como está o seu código nessa parte:

void _save(Transaction transactionCreated, String password, BuildContext context) async {
  _webClient.save(transactionCreated, password).then((transaction) {
    if(transaction != null){
      Navigator.pop(context);
    }
  }).catchError((e) {
    print(e);
  });
}

Veja se está divergente, caso esteja semelhante vou precisar que me envie todo o código para analisarmos juntos.

Qualquer dúvida, estamos a disposição.