How to Use Firebase Crashlytics in Flutter for Crash Reporting
To use
Firebase Crashlytics in Flutter, add the firebase_crashlytics package, initialize Firebase in your app, and enable Crashlytics to automatically capture crashes. You can also log custom errors and messages to monitor app stability.Syntax
The main steps to use Firebase Crashlytics in Flutter are:
- Import the
firebase_crashlyticspackage. - Initialize Firebase in your
main()function. - Enable Crashlytics error collection.
- Use
FirebaseCrashlytics.instance.recordError()to log custom errors.
dart
import 'package:flutter/widgets.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; runApp(MyApp()); }
Example
This example shows a simple Flutter app that initializes Firebase Crashlytics and logs a custom error when a button is pressed.
dart
import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Crashlytics Demo')), body: Center( child: ElevatedButton( onPressed: () { try { throw Exception('Test custom error'); } catch (e, s) { FirebaseCrashlytics.instance.recordError(e, s); } }, child: Text('Log Custom Error'), ), ), ), ); } }
Output
App shows a button labeled 'Log Custom Error'. Pressing it logs a custom error to Firebase Crashlytics.
Common Pitfalls
- Not initializing Firebase before using Crashlytics causes errors.
- Forgetting to set
FlutterError.onErrormeans Flutter errors won't be reported. - Not enabling Crashlytics in Firebase Console disables crash reporting.
- Running in debug mode may not send crash reports; test in release mode.
dart
/// Wrong: Missing Firebase initialization void main() { runApp(MyApp()); } /// Right: Initialize Firebase before runApp Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; runApp(MyApp()); }
Quick Reference
| Action | Code Snippet |
|---|---|
| Initialize Firebase | await Firebase.initializeApp(); |
| Enable Flutter error reporting | FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; |
| Log custom error | FirebaseCrashlytics.instance.recordError(error, stack); |
| Force a crash (for testing) | FirebaseCrashlytics.instance.crash(); |
Key Takeaways
Always initialize Firebase before using Crashlytics in Flutter apps.
Set FlutterError.onError to report uncaught Flutter errors automatically.
Use recordError to log custom exceptions and messages.
Test crash reporting in release mode, as debug mode may not send reports.
Enable Crashlytics in the Firebase Console to start receiving crash data.