diff --git a/packages/app_center/lib/error/error.dart b/packages/app_center/lib/error/error.dart new file mode 100644 index 000000000..1028bde1c --- /dev/null +++ b/packages/app_center/lib/error/error.dart @@ -0,0 +1 @@ +export 'error_observer.dart'; diff --git a/packages/app_center/lib/error/error_observer.dart b/packages/app_center/lib/error/error_observer.dart new file mode 100644 index 000000000..9de8986a2 --- /dev/null +++ b/packages/app_center/lib/error/error_observer.dart @@ -0,0 +1,15 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:ubuntu_logger/ubuntu_logger.dart'; + +class ErrorObserver extends ProviderObserver { + final log = Logger('error_observer'); + @override + void providerDidFail( + ProviderBase provider, + Object error, + StackTrace stackTrace, + ProviderContainer container, + ) { + log.error('Provider $provider failed', error); + } +} diff --git a/packages/app_center/lib/main.dart b/packages/app_center/lib/main.dart index 086073572..afa60c596 100644 --- a/packages/app_center/lib/main.dart +++ b/packages/app_center/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:app_center/appstream/appstream.dart'; import 'package:app_center/config.dart'; +import 'package:app_center/error/error.dart'; import 'package:app_center/l10n.dart'; import 'package:app_center/packagekit/packagekit.dart'; import 'package:app_center/providers/error_stream_provider.dart'; @@ -79,7 +80,12 @@ Future main(List args) async { await runZonedGuarded( () async { await YaruWindowTitleBar.ensureInitialized(); - runApp(const ProviderScope(child: StoreApp())); + runApp( + ProviderScope( + observers: [ErrorObserver()], + child: const StoreApp(), + ), + ); }, (error, stackTrace) { log.error('Error propagated to top-level', error, stackTrace);