fix provider lifecycle issue
This commit is contained in:
+33
-38
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user