Domain (pure Dart): - Add Recipe, MacroProfile, and RecipeIngredient entities (quantity/unit/ item parsing: decimals, ASCII/unicode/mixed fractions, known-unit vocabulary) plus MealPlanSlot reusing the nutrition MealType enum - Define IRecipeRepository and IMealPlanRepository contracts - Add ScrapeRecipeFromUrl use case: package:http download with injectable fetcher, package:html DOM parse, JSON-LD @graph/root/array/list-@type navigation, HowToStep/HowToSection flattening, ISO-8601 prep/cook times, recipeYield, regex nutrition parsing, OpenGraph fallback, and typed RecipeScrapeException - Add core/utils/uuid.dart RFC-4122 v4 generator (no new dependency) Data: - Bump AppDatabase to schema v3 (migration for v1/v2 installs) with RecipesTable (UUID PK, JSON ingredient/instruction columns, macros) and MealPlanSlotsTable (UUID PK, nullable recipeId FK ON DELETE SET NULL) - Implement DriftRecipeRepository (URL-deduplicated importRecipe, createdAt preserved on re-import) and DriftMealPlanRepository (half-open [from, to) window, upsert by id) Presentation: - Add RecipeImportController (URL submit -> loading -> preview modal state, live catalog watch stream, confirm-save/dismiss/delete) and MealPlanCalendarController (Monday-Sunday window navigation, slot assign/upsert/clear, prepared toggles, per-day protein rollup against the 100 g target, deleted-recipe slot normalization) - Rework MealPlannerScreen: URL import bar with spinner, RecipePreviewDialog (macros, ingredients, steps, save with error surface), draggable SavedRecipesTray with protein badges, responsive WeeklyCalendarView (>=900 dp: 7-column grid, below: tabbed pager) with DragTarget slots and daily protein indicators, AssignSlotDialog quick-assign modal Fixes: - Eliminate desktop resize overflow (RenderFlex hatched stripes): wide-mode day columns scroll vertically, and a LayoutBuilder collapses the page into a single scrollable column with a fixed-height calendar when the window body is shorter than ~520 dp Testing: - 29 new tests: recipe scraper (JSON-LD variants, macro/ingredient/ instruction/duration parsing, OG fallback, execute error mapping), meal-plan repositories (window filter, upsert, dedup), calendar controller (rollup, navigation, prepared/custom entries), and screen widget tests pumping short-compact/short-wide/tall/extremely-short window sizes to prove no overflow; full suite green (89/89) - BUILD_STATE.md: mark Phase 4 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.