worldhopper/lib/providers/two_page_mode_provider.dart

68 lines
2 KiB
Dart

import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:worldhopper/repositories/series_two_page_mode_repository.dart';
part 'two_page_mode_provider.g.dart';
/// Two-page spread display mode
enum TwoPageMode {
off,
auto,
}
/// Key for storing two-page mode preference in SharedPreferences
const String _twoPageModeKey = 'image_reader_two_page_mode';
/// Provider for two-page spread mode state management
@riverpod
class TwoPageModeNotifier extends _$TwoPageModeNotifier {
@override
TwoPageMode build() {
_loadTwoPageMode();
return TwoPageMode.auto; // Default value until loaded
}
/// Load two-page mode from SharedPreferences
Future<void> _loadTwoPageMode() async {
final prefs = await SharedPreferences.getInstance();
final modeString = prefs.getString(_twoPageModeKey);
if (modeString != null) {
final mode = TwoPageMode.values.firstWhere(
(m) => m.name == modeString,
orElse: () => TwoPageMode.auto,
);
state = mode;
}
}
/// Set two-page mode and persist to SharedPreferences
Future<void> setTwoPageMode(TwoPageMode mode) async {
state = mode;
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_twoPageModeKey, mode.name);
}
}
/// Provider for per-series two-page mode overrides.
/// Parameterized by seriesFeedUrl. Returns null when no override is set.
@riverpod
class SeriesToPageModeNotifier extends _$SeriesToPageModeNotifier {
@override
TwoPageMode? build(String seriesFeedUrl) {
_load(seriesFeedUrl);
return null;
}
Future<void> _load(String seriesFeedUrl) async {
final repo = SeriesToPageModeRepository();
final mode = await repo.getTwoPageMode(seriesFeedUrl);
state = mode;
}
Future<void> setTwoPageMode(TwoPageMode mode) async {
state = mode;
final repo = SeriesToPageModeRepository();
await repo.setTwoPageMode(seriesFeedUrl, mode);
}
}