Skip to content

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:

void main(List<String> args) {
  var listaNumeros = <int>[1, 2, 3];

  print(listaNumeros[4]);
}

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:

    Se quiso acceder a una posición no posible

Mas información en https://dart.dev/language/error-handling