import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:worldhopper/repositories/series_reading_mode_repository.dart'; part 'reading_mode_provider.g.dart'; /// Reading direction modes for the image reader enum ReadingMode { ltr, rtl, verticalContinuous, } /// Key for storing reading mode preference in SharedPreferences const String _readingModeKey = 'image_reader_reading_mode'; /// Provider for image reader reading mode state management @riverpod class ReadingModeNotifier extends _$ReadingModeNotifier { @override ReadingMode build() { _loadReadingMode(); return ReadingMode.ltr; // Default value until loaded } /// Load reading mode from SharedPreferences Future _loadReadingMode() async { final prefs = await SharedPreferences.getInstance(); final readingModeString = prefs.getString(_readingModeKey); if (readingModeString != null) { final readingMode = ReadingMode.values.firstWhere( (m) => m.name == readingModeString, orElse: () => ReadingMode.ltr, ); state = readingMode; } } /// Set reading mode and persist to SharedPreferences Future setReadingMode(ReadingMode mode) async { state = mode; final prefs = await SharedPreferences.getInstance(); await prefs.setString(_readingModeKey, mode.name); } } /// Provider for per-series reading mode overrides. /// Parameterized by seriesFeedUrl. Returns null when no override is set. @riverpod class SeriesReadingModeNotifier extends _$SeriesReadingModeNotifier { @override ReadingMode? build(String seriesFeedUrl) { _load(seriesFeedUrl); return null; } Future _load(String seriesFeedUrl) async { final repo = SeriesReadingModeRepository(); final mode = await repo.getReadingMode(seriesFeedUrl); state = mode; } Future setReadingMode(ReadingMode mode) async { state = mode; final repo = SeriesReadingModeRepository(); await repo.setReadingMode(seriesFeedUrl, mode); } }