47 lines
1.2 KiB
Dart
Executable File
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);
|
|
}
|
|
}
|