Domain (pure Dart): - Add PantryItem and ShoppingListItem entities plus the PantryCategory aisle enum (produce/meat_seafood/dairy/dry_goods/spices/other) with a keyword infer() heuristic and ExpirationStatus warning buckets (expired / expiringSoon within 3 days) - Add measurement_units value object (mass/volume/count dimensions with lb/oz/g/kg and ml/l/tsp/tbsp/cup conversion onto a shared base scale) and ingredient_name canonicalizer (lowercase, parenthetical stripping, plural folding: eggs -> egg, lbs -> lb) - Define IPantryRepository contract covering inventory and checklist CRUD - Add CalculateShoppingDelta use case: aggregates the active 7-day meal-plan slot window's recipe ingredient manifests by canonical name, computes deficit = totalRequired - currentPantryQuantity in base units (dominant recipe unit wins display, 2-decimal rounding), upserts isAutoGenerated rows with stable ids and source recipe titles, clears stale auto rows once stock covers the plan, and never modifies or removes manual rows Data: - Bump AppDatabase to schema v4 (migration for v1-v3 installs) with PantryItemsTable (UUID PK, canonical name, quantity/unit, aisle key, nullable expirationDate, lastUpdated) and ShoppingListItemsTable (UUID PK, required quantity/unit, purchased/auto flags, JSON sourceNotes for recipe titles) plus watch/get/upsert/delete helpers - Implement DriftPantryRepository (record <-> entity mapping, enum keys, JSON recipe-title round-trip) Presentation: - Add PantryInventoryController (live watch stream, quick +/- stock steps clamped at zero, aisle-grouping vs expiration-sort modes) and ShoppingListController (manual add, All/To Buy/Checked filter, check-off with "Add to Pantry?" unit-converting stock merge or aisle-inferred row creation, syncWithMealPlan reading the planner's Monday-Sunday window and recipe catalog) - Refactor PantryScreen: Inventory/Shopping tab header with remaining-count badge, Aisles/Expiration segmented control, categorized tiles with +/- counters and expired/expiring badges, swipe-to-delete on both lists, prominent "Sync with Meal Plan" banner with run summary + snackbar, "From: <recipe>" origin chips on auto rows, checklist filters, check-off -> pantry prompt, and Add Pantry Item / Add Shopping Item dialogs Testing: - 10 new tests in delta_calculator_test.dart: 300 g on hand vs 800 g requirement -> +500 g entry, sufficient stock -> no entry, manual rows preserved across repeated syncs, stale auto cleanup, cross-recipe plural/unit normalization (4 eggs + 2 egg - 2 -> +4 egg), lb/oz scale unification (0.75 lb), check-off -> pantry transfer (merge + aisle-inferred create), end-to-end syncWithMealPlan, and inventory canonicalization / quick-adjust clamp; full suite green (99/99) - flutter analyze clean (No issues found!) after codegen; BUILD_STATE.md: mark Phase 5 complete and record all verification gates |
||
|---|---|---|
| android | ||
| docs | ||
| ios | ||
| lib | ||
| macos | ||
| test | ||
| web | ||
| windows | ||
| .clinerules | ||
| .gitignore | ||
| .metadata | ||
| BUILD_STATE.md | ||
| README.md | ||
| analysis_options.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
README.md
glpcompanion
A new Flutter project.
Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
For help getting started with Flutter development, view the online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.