# younas548/recipe architecture

> Architecture diagram of the GitHub repository younas548/recipe, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/younas548/recipe
- Repository: https://github.com/younas548/recipe

## Overview

Recipe Finder is a Flutter app for discovering recipes: users browse categories or search, open a recipe for ingredients and instructions, and can save it to a locally persisted favorites list. Riverpod providers own asynchronous fetching and favorites state; screens present those results. The README documents the API and persistence integrations, but the sampled source does not include the Dart implementation, so internal wiring is shown only where the documented responsibilities support it.

Main entry points: [`lib/providers/favourites_provider.dart`](https://github.com/younas548/recipe/blob/main/lib/providers/favourites_provider.dart) (Favorites manager), [`lib/screens/home.dart`](https://github.com/younas548/recipe/blob/main/lib/screens/home.dart) (Category home), [`lib/screens/search-screen.dart`](https://github.com/younas548/recipe/blob/main/lib/screens/search-screen.dart) (Search screen), [`lib/screens/meal_detail_screen.dart`](https://github.com/younas548/recipe/blob/main/lib/screens/meal_detail_screen.dart) (Recipe details)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["App screens"]
  node_main["App entry<br/>[main.dart]"]
  node_home["Category home<br/>[home.dart]"]
  node_meal_list["Category meals<br/>[meal-screen.dart]"]
  node_search_screen["Search screen<br/>[search-screen.dart]"]
  node_detail_screen["Recipe details"]
  node_favorites_screen["Favorites screen"]
end

subgraph group_state["Riverpod state"]
  node_category_provider["Category fetch"]
  node_meal_provider["Category fetcher<br/>[meal-provider.dart]"]
  node_search_provider["Search state"]
  node_detail_provider["Detail fetcher"]
  node_favorites_provider["Favorites manager"]
end

subgraph group_models["Recipe models"]
  node_category_model["Category model<br/>[model.dart]"]
  node_meal_model["Meal model<br/>[meal-model.dart]"]
  node_detail_model["Meal detail model"]
end

node_user(("App user"))
node_mealdb{{"TheMealDB API"}}
node_preferences[("Shared preferences")]

node_user -->|"opens app"| node_main
node_main -->|"shows home"| node_home
node_home -->|"requests categories"| node_category_provider
node_category_provider -->|"fetches categories"| node_mealdb
node_category_provider -->|"parses response"| node_category_model
node_home -->|"selects category"| node_meal_list
node_meal_list -->|"requests meals"| node_meal_provider
node_meal_provider -->|"fetches meals"| node_mealdb
node_meal_provider -->|"parses response"| node_meal_model
node_user -->|"searches recipes"| node_search_screen
node_search_screen -->|"updates query"| node_search_provider
node_search_provider -->|"searches meals"| node_mealdb
node_search_screen -->|"opens recipe"| node_detail_screen
node_detail_screen -->|"requests details"| node_detail_provider
node_detail_provider -->|"fetches details"| node_mealdb
node_detail_provider -->|"parses response"| node_detail_model
node_user -->|"opens favorites"| node_favorites_screen
node_favorites_screen -->|"reads favorites"| node_favorites_provider
node_favorites_provider -->|"loads and saves"| node_preferences
node_detail_screen -->|"changes favorites"| node_favorites_provider
node_favorites_provider -->|"stores meals"| node_meal_model

click node_main "https://github.com/younas548/recipe/blob/main/lib/main.dart"
click node_home "https://github.com/younas548/recipe/blob/main/lib/screens/home.dart"
click node_meal_list "https://github.com/younas548/recipe/blob/main/lib/screens/meal-screen.dart"
click node_search_screen "https://github.com/younas548/recipe/blob/main/lib/screens/search-screen.dart"
click node_detail_screen "https://github.com/younas548/recipe/blob/main/lib/screens/meal_detail_screen.dart"
click node_favorites_screen "https://github.com/younas548/recipe/blob/main/lib/screens/favourites_screen.dart"
click node_category_provider "https://github.com/younas548/recipe/blob/main/lib/providers/category_provider.dart"
click node_meal_provider "https://github.com/younas548/recipe/blob/main/lib/providers/meal-provider.dart"
click node_search_provider "https://github.com/younas548/recipe/blob/main/lib/providers/search-provider.dart"
click node_detail_provider "https://github.com/younas548/recipe/blob/main/lib/providers/meal_detail_provider.dart"
click node_favorites_provider "https://github.com/younas548/recipe/blob/main/lib/providers/favourites_provider.dart"
click node_category_model "https://github.com/younas548/recipe/blob/main/lib/model/model.dart"
click node_meal_model "https://github.com/younas548/recipe/blob/main/lib/model/meal-model.dart"
click node_detail_model "https://github.com/younas548/recipe/blob/main/lib/model/meal_detail_model.dart"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_home,node_meal_list,node_search_screen,node_detail_screen,node_favorites_screen,node_user toneBlue
class node_category_provider,node_meal_provider,node_search_provider,node_detail_provider,node_favorites_provider,node_preferences toneAmber
class node_category_model,node_meal_model,node_detail_model,node_mealdb toneMint
```

## Components

### App screens

- [App entry](https://github.com/younas548/recipe/blob/main/lib/main.dart): `lib/main.dart`
- [Category home](https://github.com/younas548/recipe/blob/main/lib/screens/home.dart): `lib/screens/home.dart`
- [Category meals](https://github.com/younas548/recipe/blob/main/lib/screens/meal-screen.dart): `lib/screens/meal-screen.dart`
- [Search screen](https://github.com/younas548/recipe/blob/main/lib/screens/search-screen.dart): `lib/screens/search-screen.dart`
- [Recipe details](https://github.com/younas548/recipe/blob/main/lib/screens/meal_detail_screen.dart): `lib/screens/meal_detail_screen.dart`
- [Favorites screen](https://github.com/younas548/recipe/blob/main/lib/screens/favourites_screen.dart): `lib/screens/favourites_screen.dart`

### Riverpod state

- [Category fetch](https://github.com/younas548/recipe/blob/main/lib/providers/category_provider.dart): `lib/providers/category_provider.dart`
- [Category fetcher](https://github.com/younas548/recipe/blob/main/lib/providers/meal-provider.dart): `lib/providers/meal-provider.dart`
- [Search state](https://github.com/younas548/recipe/blob/main/lib/providers/search-provider.dart): `lib/providers/search-provider.dart`
- [Detail fetcher](https://github.com/younas548/recipe/blob/main/lib/providers/meal_detail_provider.dart): `lib/providers/meal_detail_provider.dart`
- [Favorites manager](https://github.com/younas548/recipe/blob/main/lib/providers/favourites_provider.dart): `lib/providers/favourites_provider.dart`

### Recipe models

- [Category model](https://github.com/younas548/recipe/blob/main/lib/model/model.dart): `lib/model/model.dart`
- [Meal model](https://github.com/younas548/recipe/blob/main/lib/model/meal-model.dart): `lib/model/meal-model.dart`
- [Meal detail model](https://github.com/younas548/recipe/blob/main/lib/model/meal_detail_model.dart): `lib/model/meal_detail_model.dart`

### Other components

- **App user**
- **TheMealDB API**
- **Shared preferences**

## Connections

- App user → App entry: opens app
- App entry → Category home: shows home
- Category home → Category fetch: requests categories
- Category fetch → TheMealDB API: fetches categories
- Category fetch → Category model: parses response
- Category home → Category meals: selects category
- Category meals → Category fetcher: requests meals
- Category fetcher → TheMealDB API: fetches meals
- Category fetcher → Meal model: parses response
- App user → Search screen: searches recipes
- Search screen → Search state: updates query
- Search state → TheMealDB API: searches meals
- Search screen → Recipe details: opens recipe
- Recipe details → Detail fetcher: requests details
- Detail fetcher → TheMealDB API: fetches details
- Detail fetcher → Meal detail model: parses response
- App user → Favorites screen: opens favorites
- Favorites screen → Favorites manager: reads favorites
- Favorites manager → Shared preferences: loads and saves
- Recipe details → Favorites manager: changes favorites
- Favorites manager → Meal model: stores meals
