uaestats_fe/lib/infrastructure/data/p_favorites_repo.dart
2026-05-25 18:01:41 +05:30

47 lines
1.2 KiB
Dart
Executable File

import 'dart:async';
import 'package:external_repos/external_repos.dart';
import 'package:injectable/injectable.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/domain/repos/t_favorites_repo.dart';
@dev
@prod
@Injectable(as: TFavoritesRepo)
class PFavoritesRepo implements TFavoritesRepo {
static const _key = 'favorite_indicators';
Future<Set<IndicatorEnum>> _load() async {
final prefs = await SharedPreferences.getInstance();
final raw = prefs.getStringList(_key) ?? [];
return raw
.map(
(s) => IndicatorEnum.values.firstWhere((id) => id.name == s),
)
.toSet();
}
Future<void> _save(Set<IndicatorEnum> ids) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setStringList(_key, ids.map((e) => e.name).toList());
}
@override
FutureOr<Set<IndicatorEnum>> getAll() => _load();
@override
Future<void> removeExisting(IndicatorEnum id) async {
final favs = await _load();
favs.remove(id);
await _save(favs);
}
@override
Future<void> addNew(IndicatorEnum id) async {
final favs = await _load();
favs.add(id);
await _save(favs);
}
}