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.
This commit is contained in:
Henrique Velloso
2026-02-20 16:46:46 -03:00
parent abe89d875b
commit c12e980755
+28
View File
@@ -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<bool>(
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,