fix provider lifecycle issue

This commit is contained in:
Fabian Freund
2026-05-26 05:59:16 +02:00
parent 77c3859dc2
commit ec34a28c13
@@ -261,18 +261,10 @@ class _PreferenceRepository extends _$PreferenceRepository {
class UnifiedPreferenceSettingsRepository class UnifiedPreferenceSettingsRepository
extends _$UnifiedPreferenceSettingsRepository { extends _$UnifiedPreferenceSettingsRepository {
Future<void> apply() async { Future<void> apply() async {
final preferenceRepository = ref.read(
_preferenceRepositoryProvider(partition).notifier,
);
final groups = await ref.read( final groups = await ref.read(
_preferenceSettingGroupsProvider(partition).future, _preferenceSettingGroupsProvider(partition).future,
); );
if (!ref.mounted) {
return;
}
final prefs = { final prefs = {
for (final group in groups.values) for (final group in groups.values)
...Map.fromEntries( ...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<void> reset() async { Future<void> reset() async {
final preferenceRepository = ref.read(
_preferenceRepositoryProvider(partition).notifier,
);
final groups = await ref.read( final groups = await ref.read(
_preferenceSettingGroupsProvider(partition).future, _preferenceSettingGroupsProvider(partition).future,
); );
if (!ref.mounted) {
return;
}
final prefs = groups.values final prefs = groups.values
.map((group) => group.settings.keys) .map((group) => group.settings.keys)
.flattened .flattened
.toList(); .toList();
await preferenceRepository.resetPrefs(prefs); if (ref.mounted) {
await ref
.read(_preferenceRepositoryProvider(partition).notifier)
.resetPrefs(prefs);
} else {
await GeckoPrefService().resetPrefs(prefs);
}
} }
@override @override
@@ -335,18 +334,10 @@ class UnifiedPreferenceSettingsRepository
class PreferenceSettingsGroupRepository class PreferenceSettingsGroupRepository
extends _$PreferenceSettingsGroupRepository { extends _$PreferenceSettingsGroupRepository {
Future<void> apply({List<String>? filter}) async { Future<void> apply({List<String>? filter}) async {
final preferenceRepository = ref.read(
_preferenceRepositoryProvider(partition).notifier,
);
final settingGroup = await ref.read( final settingGroup = await ref.read(
_preferenceSettingGroupProvider(partition, groupName).future, _preferenceSettingGroupProvider(partition, groupName).future,
); );
if (!ref.mounted) {
return;
}
final prefs = Map.fromEntries( final prefs = Map.fromEntries(
filter?.map( filter?.map(
(e) => MapEntry( (e) => MapEntry(
@@ -360,30 +351,34 @@ class PreferenceSettingsGroupRepository
.map((e) => MapEntry(e.key, e.value.value)), .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<void> reset({List<String>? filter}) async { Future<void> reset({List<String>? filter}) async {
final preferenceRepository = ref.read(
_preferenceRepositoryProvider(partition).notifier,
);
final settingGroup = await ref.read( final settingGroup = await ref.read(
_preferenceSettingGroupProvider(partition, groupName).future, _preferenceSettingGroupProvider(partition, groupName).future,
); );
if (!ref.mounted) {
return;
}
if (filter != null && if (filter != null &&
filter.any((value) => !settingGroup.settings.containsKey(value))) { filter.any((value) => !settingGroup.settings.containsKey(value))) {
throw Exception('Preference not part of group'); throw Exception('Preference not part of group');
} }
await preferenceRepository.resetPrefs( final prefs = filter ?? settingGroup.settings.keys.toList();
filter ?? settingGroup.settings.keys.toList(),
); if (ref.mounted) {
await ref
.read(_preferenceRepositoryProvider(partition).notifier)
.resetPrefs(prefs);
} else {
await GeckoPrefService().resetPrefs(prefs);
}
} }
@override @override