import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; abstract class ReportService { bool get isCollectionEnabled; Future setCollectionEnabled(bool enabled); Future log(String message); Future setCustomKey(String key, Object value); Future setCustomKeys(Map map); Future recordError(dynamic exception, StackTrace? stack); Future recordFlutterError(FlutterErrorDetails flutterErrorDetails); Future recordChannelError(String method, PlatformException e) { return recordError('$method failed with code=${e.code}, exception=${e.message}, details=${e.details}}', null); } } class CrashlyticsReportService extends ReportService { FirebaseCrashlytics get instance => FirebaseCrashlytics.instance; @override bool get isCollectionEnabled => instance.isCrashlyticsCollectionEnabled; @override Future setCollectionEnabled(bool enabled) => instance.setCrashlyticsCollectionEnabled(enabled); @override Future log(String message) => instance.log(message); @override Future setCustomKey(String key, Object value) => instance.setCustomKey(key, value); @override Future setCustomKeys(Map map) { final _instance = instance; return Future.forEach>(map.entries, (kv) => _instance.setCustomKey(kv.key, kv.value)); } @override Future recordError(dynamic exception, StackTrace? stack) { return instance.recordError(exception, stack); } @override Future recordFlutterError(FlutterErrorDetails flutterErrorDetails) { return instance.recordFlutterError(flutterErrorDetails); } }