68 lines
2 KiB
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);
|
|
}
|
|
}
|