import 'package:photos/core/event_bus.dart'; import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/models/file.dart'; import 'package:shared_preferences/shared_preferences.dart'; class FavoriteFilesRepository { static final _favoritePhotoIdsKey = "favorite_photo_ids"; FavoriteFilesRepository._privateConstructor(); static FavoriteFilesRepository instance = FavoriteFilesRepository._privateConstructor(); SharedPreferences _preferences; Future init() async { _preferences = await SharedPreferences.getInstance(); } bool isLiked(File photo) { return getLiked().contains(photo.generatedId.toString()); } bool hasFavorites() { return getLiked().isNotEmpty; } Future setLiked(File photo, bool isLiked) { final liked = getLiked(); if (isLiked) { liked.add(photo.generatedId.toString()); } else { liked.remove(photo.generatedId.toString()); } Bus.instance.fire(LocalPhotosUpdatedEvent()); return _preferences .setStringList(_favoritePhotoIdsKey, liked.toList()) .then((_) => isLiked); } Set getLiked() { final value = _preferences.getStringList(_favoritePhotoIdsKey); if (value == null) { return Set(); } else { return value.toSet(); } } }