From ec34a28c1336f1000ab6b58576386a233cd8cb47 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Tue, 26 May 2026 05:59:16 +0200 Subject: [PATCH] fix provider lifecycle issue --- .../repositories/preference_settings.dart | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/apps/weblibre/lib/features/geckoview/features/preferences/data/repositories/preference_settings.dart b/apps/weblibre/lib/features/geckoview/features/preferences/data/repositories/preference_settings.dart index a25b63b7..f5ddff97 100644 --- a/apps/weblibre/lib/features/geckoview/features/preferences/data/repositories/preference_settings.dart +++ b/apps/weblibre/lib/features/geckoview/features/preferences/data/repositories/preference_settings.dart @@ -261,18 +261,10 @@ class _PreferenceRepository extends _$PreferenceRepository { class UnifiedPreferenceSettingsRepository extends _$UnifiedPreferenceSettingsRepository { Future apply() async { - final preferenceRepository = ref.read( - _preferenceRepositoryProvider(partition).notifier, - ); - final groups = await ref.read( _preferenceSettingGroupsProvider(partition).future, ); - if (!ref.mounted) { - return; - } - final prefs = { for (final group in groups.values) ...Map.fromEntries( @@ -282,28 +274,35 @@ class UnifiedPreferenceSettingsRepository ), }; - await preferenceRepository.applyPrefs(prefs); + if (ref.mounted) { + await ref + .read(_preferenceRepositoryProvider(partition).notifier) + .applyPrefs(prefs); + } else { + // This auto-dispose wrapper was torn down during the await (e.g. + // invoked from an unawaited future before any UI is watching us). + // Apply directly so the prefs still land. + await GeckoPrefService().applyPrefs(prefs); + } } Future reset() async { - final preferenceRepository = ref.read( - _preferenceRepositoryProvider(partition).notifier, - ); - final groups = await ref.read( _preferenceSettingGroupsProvider(partition).future, ); - if (!ref.mounted) { - return; - } - final prefs = groups.values .map((group) => group.settings.keys) .flattened .toList(); - await preferenceRepository.resetPrefs(prefs); + if (ref.mounted) { + await ref + .read(_preferenceRepositoryProvider(partition).notifier) + .resetPrefs(prefs); + } else { + await GeckoPrefService().resetPrefs(prefs); + } } @override @@ -335,18 +334,10 @@ class UnifiedPreferenceSettingsRepository class PreferenceSettingsGroupRepository extends _$PreferenceSettingsGroupRepository { Future apply({List? filter}) async { - final preferenceRepository = ref.read( - _preferenceRepositoryProvider(partition).notifier, - ); - final settingGroup = await ref.read( _preferenceSettingGroupProvider(partition, groupName).future, ); - if (!ref.mounted) { - return; - } - final prefs = Map.fromEntries( filter?.map( (e) => MapEntry( @@ -360,30 +351,34 @@ class PreferenceSettingsGroupRepository .map((e) => MapEntry(e.key, e.value.value)), ); - await preferenceRepository.applyPrefs(prefs); + if (ref.mounted) { + await ref + .read(_preferenceRepositoryProvider(partition).notifier) + .applyPrefs(prefs); + } else { + await GeckoPrefService().applyPrefs(prefs); + } } Future reset({List? filter}) async { - final preferenceRepository = ref.read( - _preferenceRepositoryProvider(partition).notifier, - ); - final settingGroup = await ref.read( _preferenceSettingGroupProvider(partition, groupName).future, ); - if (!ref.mounted) { - return; - } - if (filter != null && filter.any((value) => !settingGroup.settings.containsKey(value))) { throw Exception('Preference not part of group'); } - await preferenceRepository.resetPrefs( - filter ?? settingGroup.settings.keys.toList(), - ); + final prefs = filter ?? settingGroup.settings.keys.toList(); + + if (ref.mounted) { + await ref + .read(_preferenceRepositoryProvider(partition).notifier) + .resetPrefs(prefs); + } else { + await GeckoPrefService().resetPrefs(prefs); + } } @override