select method
Implementation
Future<void> select(String value) async {
final current = state.value;
if (current == null ||
!current.enabled ||
_saving ||
current.isSaving ||
value == current.value) {
return;
}
final version = ++_requestVersion;
_saving = true;
state = AsyncData(current.copyWith(isSaving: true, clearError: true));
try {
switch (_id) {
case .language:
await ref.read(languageRepositoryProvider).select(value);
case .themeMode:
await ref
.read(preferencesRepositoryProvider)
.set(PrefKey.themeMode, value);
}
final next = await _readCurrent();
if (ref.mounted && version == _requestVersion) {
state = AsyncData(next);
}
} catch (_) {
if (ref.mounted && version == _requestVersion) {
state = AsyncData(
current.copyWith(
isSaving: false,
error: PreferenceDetailError.save,
),
);
}
} finally {
_saving = false;
final latest = state.value;
if (ref.mounted &&
version == _requestVersion &&
latest?.isSaving == true &&
latest?.error == null) {
state = AsyncData(latest!.copyWith(isSaving: false));
}
}
}