A Dart package that reports Flutter framework errors and uncaught async errors. The handlers are wired explicitly so you can compose them with your own.
Add it to pubspec.yaml (or flutter pub add errorgap):
dependencies:
errorgap: ^0.2.0In main(), initialize and wire both error handlers:
void main() {
WidgetsFlutterBinding.ensureInitialized();
Errorgap.init(ErrorgapConfiguration(
endpoint: 'https://your-endpoint',
projectSlug: 'your-project',
apiKey: const String.fromEnvironment('ERRORGAP_API_KEY'),
environment: kReleaseMode ? 'production' : 'development',
));
FlutterError.onError = (details) {
Errorgap.notify(details.exception, stackTrace: details.stack);
FlutterError.presentError(details);
};
PlatformDispatcher.instance.onError = (error, stack) {
Errorgap.notify(error, stackTrace: stack);
return true;
};
runApp(const MyApp());
}Pass the key with --dart-define=ERRORGAP_API_KEY=... rather than hardcoding it.
ElevatedButton(
onPressed: () => throw Exception('Errorgap test error'),
child: const Text('Test Errorgap'),
)Confirm your key and endpoint reach errorgap before wiring anything else — send one event straight to the ingestion API:
curl -sS -X POST "$ERRORGAP_ENDPOINT/api/projects/$ERRORGAP_PROJECT_SLUG/notices" \
-H "content-type: application/json" \
-H "x-errorgap-project-key: $ERRORGAP_API_KEY" \
-d '{"errors":[{"type":"ErrorgapInstallTest","message":"Errorgap install verification"}]}'A 201 with a group_id means ingestion works (202 = received but sampled; 401 = wrong key). Then trigger the test error above through the SDK. Your onboarding screen's Verify step checks the stack off automatically once the first event lands — it polls every three seconds.
Next: the full ingestion API, or browse every SDK.