A Flutter plugin to use the Firebase Crashlytics Service.
For Flutter plugins for other Firebase products, see FlutterFire.md.
Note: This plugin is still under development, and some APIs might not be available yet. Feedback and Pull Requests are most welcome!
To use the firebase_crashlytics plugin, follow the plugin installation instructions.
Enable the Google services by configuring the Gradle scripts as such:
[project]/android/build.gradle file.repositories {
google()
jcenter()
// Additional repository for fabric resources
maven {
url 'https://maven.fabric.io/public'
}
}
[project]/android/build.gradle file.dependencies { // Example existing classpath classpath 'com.android.tools.build:gradle:3.2.1' // Add the google services classpath classpath 'com.google.gms:google-services:4.3.0' // Add fabric classpath classpath 'io.fabric.tools:gradle:1.26.1' }
[project]/android/app/build.gradle file.// ADD THIS AT THE BOTTOM apply plugin: 'io.fabric' apply plugin: 'com.google.gms.google-services'
Note: If this section is not completed, you will get an error like this:
java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process [package name]. Make sure to call FirebaseApp.initializeApp(Context) first.
Note: When you are debugging on Android, use a device or AVD with Google Play services. Otherwise, you will not be able to use Firebase Crashlytics.
Add the Crashlytics run scripts:
Runner from the project navigation.Build Phases tab.+ Add a new build phase, and select New Run Script Phase.${PODS_ROOT}/Fabric/run to the Type a script... text box.Info.plist, built by your app, to the Build Phase's Input Files field.$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)Add the following imports to your Dart code:
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
Setup Crashlytics:
void main() { // Set `enableInDevMode` to true to see reports while in debug mode // This is only to be used for confirming that reports are being // submitted as expected. It is not intended to be used for everyday // development. Crashlytics.instance.enableInDevMode = true; // Pass all uncaught errors from the framework to Crashlytics. FlutterError.onError = Crashlytics.instance.recordFlutterError; runApp(MyApp()); }
Overriding FlutterError.onError with Crashlytics.instance.recordFlutterError will automatically catch all errors that are thrown from within the Flutter framework.
If you want to catch errors that occur in runZoned, you can supply Crashlytics.instance.recordError to the onError parameter:
runZoned<Future<void>>(() async { // ... }, onError: Crashlytics.instance.recordError);
If an error is caught, you should see the following messages in your logs:
flutter: Flutter error caught by Crashlytics plugin: // OR if you use recordError for runZoned: flutter: Error caught by Crashlytics plugin <recordError>: // Exception, context, information, and stack trace in debug mode // OR if not in debug mode: flutter: Error reported to Crashlytics.
Note: It may take awhile (up to 24 hours) before you will be able to see the logs appear in your Firebase console.
See the example application source for a complete sample app using firebase_crashlytics.
Please file issues to send feedback or report a bug. Thank you!