A Flutter application for browsing, searching, and saving meals using TheMealDB API.
The app demonstrates clean architecture concepts, state management with BLoC/Cubit, and local persistence using SQLite.
- 🔍 Search meals by name
- 🍱 Browse meals by categories
- 📖 View detailed meal information
- ❤️ Add/remove favorite meals
- 💾 Offline access using local SQLite database
- 📱 Clean and responsive UI
This project uses a feature-based architecture with Cubit (BLoC pattern):
lib/ ├── core/ │ ├── network/ │ ├── database/ │ ├── styles/ │ └── widgets/ │ ├── features/ │ ├── home_screen/ │ ├── search_result_screen/ │ ├── my_meals/ │ ├── meal_details/ │ └── add_meals_screen/
- Flutter Bloc (Cubit)
- Feature-based Cubits per screen
- Flutter
- Dart
- BLoC / Cubit
- Dio (API requests)
- SQLite (local storage)
- GoRouter (navigation)
This app uses:
Meals are stored locally using SQLite to allow offline access to saved meals.
- Home Screen (Categories + Meals)
- Search Screen
- Meal Details Screen
- My Meals (Favorites)
- Add Meal Screen
HomeCubit→ handles categories & meals from APISearchCubit→ handles search functionalityMyMealsCubit→ handles local saved mealsMealDetailsCubit→ handles meal details view state
- This project is currently in active refactoring.
- Architecture will be improved to introduce a global Favorites state and better separation of concerns.
- Add dependency injection (get_it)
- Implement offline-first architecture
- Improve caching strategy
- Add animations and UI enhancements
- Improve test coverage
Built by Khalid Karam as part of Flutter learning and portfolio development.