Manejo de errores
Dart puede lanzar Excepciones, que no es mas que lanzar errores cuando no sabe maneja alguna situación inesperada; esto hace que nuestra aplicación falle, y debemos tratar esos problemas cuando suceden.
La estructura mas general para atrapar una excepción es envolver la parte de código donde puede suceder el error.
- Bloque
try
: Aquí va todo el código que escribimos habitualmente; es decir, lo que se supone que se debe ejecutar si todo marcha bien. - Bloque
catch
: En esa sección va el código que se debe ejecutar cuando se genere un error.
try{
// código que se ejecuta normalmente
}catch (e) {
// código que se ejecuta si en la sección del try se genero un excepción
// La variable `e` es el objeto que trae la información del error, la podemos usar o no, eso depende de nuestras necesidades
}
Ejemplo
Vamos a suponer que queremos acceder a una posicion de una lista que no existe, esto nos da un error de posicion:
Cuando ejecutamos nos lanza una excepción:
Unhandled exception:
RangeError (index): Invalid value: Not in inclusive range 0..2: 4
#0 List.[] (dart:core-patch/growable_array.dart:264:36)
#1 main (file:///home/xizuth/Projects/curso_flutter/docs/programs/error.dart:4:21)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:33)
#3 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
- El error nos varia información, nos dice de entrada que la excepción no esta siendo manejada o atrapada.
- Nos dice cual es el error que causo que se disparara la excepción
- Nos da el stack o la ruta de como fue la propagación del error.
Vamos a evitar que nos diga ese error, por un mensaje mas amigable
void main(List<String> args) {
try {
var listaNumeros = <int>[1, 2, 3];
print(listaNumeros[4]);
} catch (e) {
print("Se quiso acceder a una posición no posible");
}
}
Salida:
Mas información en https://dart.dev/language/error-handling