import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf/pdf.dart'; // PdfPageFormat // 1. Menu Mode Toggle final menuModeProvider = NotifierProvider(MenuModeNotifier.new); class MenuModeNotifier extends Notifier { @override bool build() => false; void set(bool value) => state = value; void toggle() => state = !state; } // 2. Selected Sake IDs class SelectedMenuSakeNotifier extends Notifier> { @override Set build() => {}; void toggle(String id) { if (state.contains(id)) { state = {...state}..remove(id); } else { state = {...state, id}; } } void clear() => state = {}; bool isSelected(String id) => state.contains(id); } final selectedMenuSakeIdsProvider = NotifierProvider>(SelectedMenuSakeNotifier.new); // 3. Menu Order final menuOrderedIdsProvider = NotifierProvider>(MenuOrderedIdsNotifier.new); class MenuOrderedIdsNotifier extends Notifier> { @override List build() => []; void initialize(List currentSelection) { state = List.from(currentSelection); } void reorder(int oldIndex, int newIndex) { if (oldIndex < newIndex) { newIndex -= 1; } final item = state.removeAt(oldIndex); state.insert(newIndex, item); state = [...state]; // Trigger notify } } // 4. PDF Settings Providers (Phase 4) // Note: We use Notifiers for complex logic, but simple StateProviders (Riverpod 2.0 style) are fine here. // Actually, Riverpod recommended is Notifier, but StateProvider is still available. // Let's use simple class-based Notifiers for 2.0 strictness if needed, or simple State for brevity. // We will use StateProvider for now as they are declared in the previous snippets as "Notifiers" but let's stick to simple Notifiers or StateProvider if imported. // In the viewed file, I only see NotifierProvider. Let's add simple Notifiers. final pdfPageFormatProvider = NotifierProvider(PdfPageFormatNotifier.new); class PdfPageFormatNotifier extends Notifier { @override PdfPageFormat build() => PdfPageFormat.a4; // Default Portrait A4. // Wait, A4 is actually "Portrait" by default in pdf package? Yes. void set(PdfPageFormat format) => state = format; } final pdfIsPortraitProvider = NotifierProvider(PdfIsPortraitNotifier.new); class PdfIsPortraitNotifier extends Notifier { @override bool build() => true; // Default Portrait void set(bool value) => state = value; } final pdfIsMonochromeProvider = NotifierProvider(PdfIsMonochromeNotifier.new); class PdfIsMonochromeNotifier extends Notifier { @override bool build() => false; void set(bool value) => state = value; } final pdfIncludePriceProvider = NotifierProvider(PdfIncludePriceNotifier.new); class PdfIncludePriceNotifier extends Notifier { @override bool build() => true; void set(bool value) => state = value; } final pdfDensityProvider = NotifierProvider(PdfDensityNotifier.new); class PdfDensityNotifier extends Notifier { @override double build() => 1.8; // Default 1.8 "High Density" void set(double value) => state = value; } // 4. Show Selected Only Toggle final menuShowSelectedOnlyProvider = NotifierProvider(MenuShowSelectedNotifier.new); class MenuShowSelectedNotifier extends Notifier { @override bool build() => false; void toggle() => state = !state; void set(bool value) => state = value; } // Logic to initialize menu order when entering mode or selecting items? // Maybe easier: // HomeScreen filters `rawList` by `selectedIds`. // Result is a list. // If the user reorders this list, we need to store the new order. // Let's use `menuOrderedIdsProvider` to store the authoritative order of the MENU. // When generating PDF, we read `menuOrderedIdsProvider` (or the current list in UI).