worldhopper/lib/providers/cover_page_provider.dart

55 lines
1.6 KiB
Dart

import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:worldhopper/repositories/series_cover_page_repository.dart';
part 'cover_page_provider.g.dart';
/// Key for storing cover page preference in SharedPreferences
const String _coverPageKey = 'image_reader_first_page_is_cover';
/// Provider for "first page is cover" setting (global default)
@riverpod
class CoverPageNotifier extends _$CoverPageNotifier {
@override
bool build() {
_load();
return true; // Default: first page is cover
}
Future<void> _load() async {
final prefs = await SharedPreferences.getInstance();
final value = prefs.getBool(_coverPageKey);
if (value != null) {
state = value;
}
}
Future<void> setCoverPage(bool value) async {
state = value;
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_coverPageKey, value);
}
}
/// Provider for per-series cover page overrides.
/// Parameterized by seriesFeedUrl. Returns null when no override is set.
@riverpod
class SeriesCoverPageNotifier extends _$SeriesCoverPageNotifier {
@override
bool? build(String seriesFeedUrl) {
_load(seriesFeedUrl);
return null;
}
Future<void> _load(String seriesFeedUrl) async {
final repo = SeriesCoverPageRepository();
final value = await repo.getCoverPage(seriesFeedUrl);
state = value;
}
Future<void> setCoverPage(bool value) async {
state = value;
final repo = SeriesCoverPageRepository();
await repo.setCoverPage(seriesFeedUrl, value);
}
}