From c12e980755ef704be76a8d53012680896873a1bc Mon Sep 17 00:00:00 2001 From: Henrique Velloso Date: Fri, 20 Feb 2026 16:46:46 -0300 Subject: [PATCH] hotfix(auth): sign out when Amber is uninstalled Prevent a crash when a user is still signed in after uninstalling Amber by listening to package manager changes and automatically signing out when Amber is removed. Show a global toast so users understand why they were signed out. --- lib/main.dart | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index 4a7a1ba..c6c1bb1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,6 +12,7 @@ import 'package:purplebase/purplebase.dart'; import 'package:amber_signer/amber_signer.dart'; import 'package:zapstore/services/app_restart_service.dart'; import 'package:zapstore/services/background_update_service.dart'; +import 'package:zapstore/services/notification_service.dart'; import 'package:zapstore/services/secure_storage_service.dart'; import 'package:zapstore/router.dart'; import 'package:zapstore/services/package_manager/package_manager.dart'; @@ -102,6 +103,33 @@ class ZapstoreApp extends HookConsumerWidget { return () => subscription?.cancel(); }, []); + // Automatically sign out when Amber is uninstalled while signed in. + ref.listen( + packageManagerProvider.select( + (state) => state.installed.containsKey(kAmberPackageId), + ), + (previous, isAmberInstalled) { + if (previous != true || isAmberInstalled) return; + if (ref.read(Signer.activePubkeyProvider) == null) return; + + final toastContext = rootNavigatorKey.currentState?.overlay?.context; + if (toastContext != null && toastContext.mounted) { + toastContext.showInfo('Amber was removed, you were signed out'); + } + + unawaited( + ref + .read(amberSignerProvider) + .signOut() + .catchError( + (Object error, StackTrace stackTrace) => debugPrint( + 'Auto sign-out after Amber uninstall failed: $error', + ), + ), + ); + }, + ); + // Always show the main app UI, even during initialization return MaterialApp.router( title: title,