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 _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 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 _load(String seriesFeedUrl) async { final repo = SeriesToPageModeRepository(); final mode = await repo.getTwoPageMode(seriesFeedUrl); state = mode; } Future setTwoPageMode(TwoPageMode mode) async { state = mode; final repo = SeriesToPageModeRepository(); await repo.setTwoPageMode(seriesFeedUrl, mode); } }