feat: Enhance APNS token retrieval with retries and add cancel functionality to revert changes in notification and privacy settings.
This commit is contained in:
@@ -22,6 +22,10 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
|
||||
bool _isLoadingNotifications = false;
|
||||
bool _isSavingNotifications = false;
|
||||
|
||||
// Snapshot of original values for cancel/reset
|
||||
Map<String, Map<String, bool>> _originalPrefs = {};
|
||||
String _originalFrequency = 'instant';
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -55,6 +59,12 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
|
||||
_digestFrequency = data['digestFrequency'] as String? ?? 'instant';
|
||||
_isLoadingNotifications = false;
|
||||
_notificationsLoaded = true;
|
||||
// Save snapshot for cancel/reset
|
||||
_originalPrefs = {
|
||||
for (final e in _notificationPrefs.entries)
|
||||
e.key: Map<String, bool>.from(e.value),
|
||||
};
|
||||
_originalFrequency = _digestFrequency;
|
||||
});
|
||||
} catch (_) {
|
||||
setState(() {
|
||||
@@ -144,8 +154,12 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
|
||||
ProfileActionButtons(
|
||||
onSave: _saveNotificationSettings,
|
||||
onCancel: () {
|
||||
_notificationsLoaded = false;
|
||||
_loadNotificationPreferences();
|
||||
setState(() {
|
||||
for (final key in _originalPrefs.keys) {
|
||||
_notificationPrefs[key] = Map<String, bool>.from(_originalPrefs[key]!);
|
||||
}
|
||||
_digestFrequency = _originalFrequency;
|
||||
});
|
||||
},
|
||||
isSaving: _isSavingNotifications,
|
||||
),
|
||||
|
||||
@@ -23,6 +23,14 @@ class _PrivacyTabState extends ConsumerState<PrivacyTab> {
|
||||
bool _isSavingPrivacy = false;
|
||||
bool _privacyLoaded = false;
|
||||
|
||||
// Snapshot for cancel/reset
|
||||
String _origProfileVisibility = 'public';
|
||||
String _origContactInfo = 'connections';
|
||||
String _origActivityStatus = 'public';
|
||||
bool _origShareAnalytics = false;
|
||||
bool _origPersonalizedAds = false;
|
||||
bool _origThirdPartySharing = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -50,6 +58,13 @@ class _PrivacyTabState extends ConsumerState<PrivacyTab> {
|
||||
dataSettings['thirdPartySharing'] as bool? ?? false;
|
||||
_isLoadingPrivacy = false;
|
||||
_privacyLoaded = true;
|
||||
// Save snapshot for cancel/reset
|
||||
_origProfileVisibility = _profileVisibility;
|
||||
_origContactInfo = _contactInfo;
|
||||
_origActivityStatus = _activityStatus;
|
||||
_origShareAnalytics = _shareAnalytics;
|
||||
_origPersonalizedAds = _personalizedAds;
|
||||
_origThirdPartySharing = _thirdPartySharing;
|
||||
});
|
||||
} catch (_) {
|
||||
setState(() => _isLoadingPrivacy = false);
|
||||
@@ -150,8 +165,14 @@ class _PrivacyTabState extends ConsumerState<PrivacyTab> {
|
||||
ProfileActionButtons(
|
||||
onSave: _savePrivacyPreferences,
|
||||
onCancel: () {
|
||||
_privacyLoaded = false;
|
||||
_loadPrivacyPreferences();
|
||||
setState(() {
|
||||
_profileVisibility = _origProfileVisibility;
|
||||
_contactInfo = _origContactInfo;
|
||||
_activityStatus = _origActivityStatus;
|
||||
_shareAnalytics = _origShareAnalytics;
|
||||
_personalizedAds = _origPersonalizedAds;
|
||||
_thirdPartySharing = _origThirdPartySharing;
|
||||
});
|
||||
},
|
||||
isSaving: _isSavingPrivacy),
|
||||
const SizedBox(height: 24),
|
||||
|
||||
Reference in New Issue
Block a user