Função runZonedGuarded no Flutter

Tempo de leitura: < 1 minute

Olá, leitores, hoje vamos falar sobre a função runZonedGuarded no Flutter.

runZonedGuarded é uma função usada para implementar um bloco de código em uma zona especial. Essa função o ajuda a lidar com exceções não capturadas que possam ocorrer durante a execução desse código.

Temos 2 métodos no dart.

  1. runZoned
  2. runZonedGuarded

A diferença entre runZoned e runZonedGuarded está no tratamento de erros. runZoned captura erros e exceções, mas não impede o travamento do aplicativo. Por outro lado, o runZonedGuarded captura os erros, permite que você os trate de forma elegante e, em seguida, evita o travamento do aplicativo.

Vamos seguir o passo a passo da implementação.

Então, agora vamos tratar a exceção e, depois disso, enviaremos essa exceção para o firebase. Para isso, adicionaremos o pacote firebase_crashlytics ao nosso projeto.

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^2.24.2
  firebase_crashlytics: ^3.4.9

envolveremos todo o seu aplicativo em uma função que captura erros. Nossa função receberá dois argumentos: uma função de retorno de chamada e uma função de tratamento de erros.

void main() {
  runZonedGuarded(() {
    WidgetsFlutterBinding.ensureInitialized();

    FlutterError.onError = (FlutterErrorDetails details) {
      catchUnhandledExceptions(details.exception, details.stack);
    };

    runApp(const MainApp());

  }, catchUnhandledExceptions);
}

void catchUnhandledExceptions(Object error, StackTrace? stack) {
  FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
  debugPrintStack(stackTrace: stack, label: error.toString());
}

Se ocorrer algum erro não tratado durante a execução do aplicativo, ele será capturado pelo método catchUnhandledExceptions.

 

Conclusão

O tratamento de erros é uma parte essencial do desenvolvimento de aplicativos no Flutter. A função runZonedGuarded captura e trata os erros não capturados, evitando que o aplicativo falhe. Isso melhora a estabilidade do aplicativo.