1
resposta

Módulo 2 - Aula 3

No trecho abaixo:

void _save(Transaction transactionCreated, String password, BuildContext context) async {
  _webClient.save(transactionCreated, password).then((transaction) {
    if(transaction != null){
      Navigator.pop(context);
    }
  }).catchError((e) {
    showDialog(context: context, builder: (contextDialog) {
      return FailureDialog(e.message);
    });
  }, test: (e) => e is Exception);
}

qual é a diferença real entre o parâmetro test usado na aula, ou tipar o .catchError() confome abaixo?

void _save(Transaction transactionCreated, String password, BuildContext context) async {
  _webClient.save(transactionCreated, password).then((transaction) {
    if(transaction != null){
      Navigator.pop(context);
    }
  }).catchError((Exception e) {
    showDialog(context: context, builder: (contextDialog) {
      return FailureDialog(e.message);
    });
  });
}
1 resposta

Olá, Gabriel!

A diferença entre o parâmetro test usado na aula e tipar o .catchError() conforme o segundo trecho de código que você postou é a forma como o erro é tratado.

No primeiro trecho de código, o parâmetro test é utilizado para verificar se o erro capturado é uma instância da classe Exception. Caso seja, o erro é tratado pelo catchError(). Essa abordagem é útil quando você deseja tratar apenas um tipo específico de erro e ignorar os demais.

Já no segundo trecho de código, o .catchError() é tipado com Exception. Isso significa que qualquer erro capturado será tratado por esse bloco. Nesse caso, não há uma verificação específica do tipo de erro.

Em resumo, a diferença está na granularidade do tratamento de erros. No primeiro trecho de código, apenas erros que são instâncias da classe Exception são tratados, enquanto no segundo trecho de código, qualquer erro é tratado.

Espero ter ajudado e bons estudos!