Skip to content

WIP - feat(nutrition): implement ingredients management and custom lists#1194

Open
pankaj-basnet wants to merge 5 commits into
wger-project:feature/offline-modefrom
pankaj-basnet:feat/nutrition-ingredients-implementation
Open

WIP - feat(nutrition): implement ingredients management and custom lists#1194
pankaj-basnet wants to merge 5 commits into
wger-project:feature/offline-modefrom
pankaj-basnet:feat/nutrition-ingredients-implementation

Conversation

@pankaj-basnet
Copy link
Copy Markdown
Contributor

@pankaj-basnet pankaj-basnet commented May 12, 2026

Still WIP (for "feature/offline-mode" branch)

  • Ingredient Management module, enabling users to organize nutritional data into custom lists with full offline support. It leverages PowerSync and Drift for local persistence, ensuring that ingredient data and user-created lists remain reactive and accessible without an internet connection.

  • Ingredients Screen:

    • High-performance browsing of nutritional data with localized support.
    • Advanced filtering system including Nutri-Score, Vegan/Vegetarian flags, and real-time text search.
    • Detailed ingredient views including energy, macronutrient breakdowns, and image support.
  • Custom Ingredient Lists:

    • Users can now create, rename, and delete custom lists (e.g., "Daily Staples," "High Protein Snacks").

    • Implemented a "Manage all lists" screen for high-level organization.

    • Added an "Add to List" bottom sheet accessible from ingredient details.

    • Real-time membership toggling with immediate UI feedback via Riverpod.

  • Database Architecture:

    • Defined ingredient_lists and ingredient_list_items tables in the PowerSync schema.
    • Updated the main database.dart to include these new entities for local-first synchronization.
  • State Management:

    • Implemented reactive providers (allIngredientListsProvider, ingredientsInListProvider) for real-time list updates.
    • Optimized UI rebuilding using code-generated Riverpod notifiers.

Proposed Changes

  • Files (added/modified)**

1. Persistence & Data Layer

  • Schema & Database:

  • lib/database/powersync/database.dart (Main database definition)

  • lib/database/powersync/tables/ingredient_lists.dart (User list table)

  • lib/database/powersync/tables/ingredient_list_items.dart (Junction table for many-to-many)

  • Repositories & Data Models:

  • lib/providers/ingredient_repository.dart (Data access layer)

  • lib/models/nutrition/ingredient_filters.dart (Filter logic model)

  • lib/models/nutrition/ingredient_list_entry.dart (UI-specific data model)

2. State Management (Logic Layer)

  • Providers & Notifiers:
  • lib/providers/ingredient_notifier.dart (Main state controller)
  • lib/providers/ingredient_filters_notifier.dart (Filtering logic)

3. User Interface (Presentation Layer)

  • Main Screens:

  • lib/screens/ingredients_screen.dart (Search & Discovery)

  • lib/screens/ingredient_screen.dart (Individual detail view)

  • lib/screens/ingredient_lists_screen.dart (List management)

  • lib/screens/ingredient_list_detail_screen.dart (Inside a specific list)

  • lib/screens/nutritional_plans_screen.dart (Integration point)

  • Reusable Widgets:

  • lib/widgets/nutrition/add_ingredient_to_list_sheet.dart (Action sheet)

  • lib/widgets/nutrition/ingredient_filter_row.dart (Filter bar)

  • lib/widgets/nutrition/ingredient_list_tile.dart (Card UI)

  • lib/widgets/nutrition/ingredient_images.dart (Image handling)

Related Issue(s)

Please check that the PR fulfills these requirements

  • Tests for the changes have been added (for bug fixes / features)
  • Set a 100-character limit to avoid white space diffs (run dart format .)

📱 UI Gallery: Nutrition & Ingredient Management

**1. ** **2. ** **3. **
Ingredients List Filter Options Nutritional Info
**4. ** **5. ** **6. **
My Lists Add to List Sheet List Items

@pankaj-basnet pankaj-basnet force-pushed the feat/nutrition-ingredients-implementation branch 2 times, most recently from 221ab66 to a5cb4e2 Compare May 20, 2026 15:59
pankaj-basnet and others added 4 commits May 20, 2026 21:51
…d providers for ingredient state and filtering, reusable ingredient UI components and localization, integrate ingredients and nutritional plans screens

files added/modified:
      lib/models/nutrition/ingredient_filters.dart       lib/providers/ingredient_repository.dart
      lib/providers/ingredient_notifier.dart       lib/providers/ingredient_notifier.g.dart       lib/providers/ingredient_filters_notifier.dart       lib/providers/ingredient_filters_notifier.g.dart

      lib/l10n/app_en.arb       lib/widgets/nutrition/ingredient_list_tile.dart       lib/widgets/nutrition/ingredient_detail.dart       lib/widgets/nutrition/ingredient_filter_row.dart       lib/widgets/nutrition/ingredient_images.dart

      lib/main.dart       lib/screens/ingredients_screen.dart       lib/screens/ingredient_screen.dart       lib/screens/nutritional_plans_screen.dart
@rolandgeider
Copy link
Copy Markdown
Member

BTW, we already have IngredientDetails, we can probably reuse that one with little work (and now that I look into the file, ingredientImage should be capitalized).

Also, is IngredientFilterDialog duplicated?

@pankaj-basnet
Copy link
Copy Markdown
Contributor Author

reused IngredientDetails . yes, the duplicated IngredientFilterDialog was there, removed now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants