Mobile App Development · Dart/Flutter
Trate erros em tempo de execução sem derrubar o programa: try, catch, on, finally, throw e exceções customizadas.
Nesta aula você vai aprender a lidar com situações inesperadas — como uma conversão de texto inválida ou uma regra de negócio violada — sem deixar o programa travar. Você vai envolver código arriscado em try/catch, capturar tipos específicos de erro com on, garantir limpeza de recursos com finally, lançar erros manualmente com throw e criar suas próprias classes de exceção para deixar as regras do domínio mais expressivas.
try / catch
Envolve um trecho de código que pode falhar e captura a exceção, permitindo continuar a execução em vez de encerrar o programa.
on FormatException
Captura apenas um tipo específico de exceção, tornando o tratamento mais preciso do que um catch genérico.
finally
Bloco executado sempre, com ou sem erro. Ideal para liberar recursos como conexões e arquivos abertos.
throw
Lança uma exceção manualmente quando uma regra do programa é violada, interrompendo a função e propagando o erro para quem a chamou.
implements Exception
Cria uma classe de exceção customizada para representar um erro específico do domínio da aplicação.
catch (erro)
Captura o objeto da exceção em uma variável, permitindo inspecionar ou exibir sua mensagem com interpolação de string.
on Tipo catch (erro)
Combina a captura de um tipo específico com o acesso ao objeto do erro — o melhor dos dois mundos.
Evite catch vazio, mostre mensagens amigáveis ao usuário e não use exceções para controlar o fluxo normal do programa.
// Demonstração de tratamento de exceções com try/catch em Dart.
// 'try' envolve o código que pode lançar um erro.
// 'catch' captura a exceção e permite tratá-la sem encerrar o programa.
void main() {
// Simulação de entrada inválida que não pode ser convertida para int.
String idadeTexto = 'vinte';
// O bloco 'try' tenta executar o código; se falhar, vai para o 'catch'.
try {
// int.parse() lança FormatException se a String não for um número inteiro.
int idade = int.parse(idadeTexto);
print('Idade: $idade');
// O bloco 'catch' captura qualquer exceção e permite uma resposta controlada.
} catch (erro) {
// Em vez de travar o programa, exibe uma mensagem amigável ao usuário.
print('Nao foi possivel converter a idade.');
}
}
Nao foi possivel converter a idade.
try-catch.on FormatException.finally.throw.