# Firebase Crashlytics

Para instalar e iniciar o uso do plugin, basta adicionar ele ao pubspec, e fazer as seguintes configurações para Android:

<figure><img src="https://348668937-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fp9x2wonlXUzxbDgsuLtw%2Fuploads%2FhYAsbbshmosFnNtLG4fZ%2Fimage.png?alt=media&#x26;token=946e8c8f-c836-44b1-8a31-bfc8daa0aad8" alt=""><figcaption></figcaption></figure>

Para mais informações, segue a [documentação](https://firebase.flutter.dev/docs/crashlytics/overview/).

Vou mostrar agora um exemplo, de como configurar para pegar os erros de maneira eficiente nos nossos projetos.

## Para erros fatais e erros de Widget:&#x20;

Basta adicionar o seguinte código dentro da main do projeto:

```dart
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

PlatformDispatcher.instance.onError = ((exception, stackTrace) {
    FirebaseCrashlytics.instance.recordError(exception, stackTrace);
    return true;
 });
```

## Para erros em Requests externas:

Dentro do nosso arquivo de dio\_config, é possível fazer um override da função de onError do Dio, para capturar todo e qualquer erro que acontecer. Com isso, podemos utilizar isso para garantir que todos os erros vão ser logados no crashlytics.

```dart
@override
  Future onError(DioError err, ErrorInterceptorHandler handler) async {
    FirebaseCrashlytics.instance.setUserIdentifier(
      FirebaseAuth.instance.currentUser?.uid ?? "SEM_ID",
    );

    FirebaseCrashlytics.instance.setCustomKey(
      'URL',
      '${err.requestOptions.baseUrl}${err.requestOptions.path}',
    );

    FirebaseCrashlytics.instance.setCustomKey(
      'USER_ID',
      '${FirebaseAuth.instance.currentUser?.uid}',
    );

    FirebaseCrashlytics.instance.setCustomKey(
      'RESPONSE',
      err.response.toString(),
    );

    await FirebaseCrashlytics.instance.recordError(
      err.error.toString(),
      err.stackTrace,
      reason: err.message,
    );

    handler.next(err);
  }
```

Como esse exemplo de implementação, é logado todo e qualquer erro nas requests, passando qual foi o usuário do Firebase que fez a request, qual a URL que deu erro e a response que teve.
