Skip to content

MuhammadSabah/Frisp

Repository files navigation

food_app_icon
Frisp

Table of Contents

WeCode Bootcamp final project.

A small social networking application for food recipes.

For this project my goal is to learn about organizing code, folder structure, using backend, Firebase services, having a good UI/UX Design, data persistent, deep linking, responsiveness and implementing functionalities for a complex app.

Languages and Tools:

dart flutter firebase VS code

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.

Prerequisites

Clone repository git clone https://github.com/MuhammadSabah/Food-Recipe-FinalProject.git

and open pubspec.yaml

run flutter pub get

run app on an emulator flutter run

πŸš€ Features :

β€’ Exploring different types of recipes and categories.

β€’ Searching for specific recipes.

β€’ Bookmarking your favorite recipes.

β€’ Ability to Post, and Comment on what other people have shared.

β€’ A list for saving ingredients while going to grocery store.

β€’ Like and reply to comments.

β€’ Search for specific users and view their profile.

β€’ Send messages to other users and add them to your chat list.

βœ… Roadmap :

  • Use Firebase for user Auth.
  • Implement deep linking for desktop and mobile.
  • Use FontAwesome icons instead of material icons.
  • Finish the UI design for the signup and login screens.
  • Create data models for the JSON data.
  • Code the search recipe tab.
  • Code the bookmark tab.
  • Use Streams instead of Provider to save each recipe.
  • Save complex data using Hive.
  • Save simple data using SharedPreferences.
  • Switch the API service to either Dio or Chopper.
  • Add searching functionality.
  • Use Firebase to implement posting functionality.
  • Design and Code Splash and Onboarding screen.
  • Implement Chatting or Commenting functionality.
  • Complete the Discovery Screen.
  • Code the Profile Screen.
  • Design and Code the recipe details screeen.
  • Make the app responsive for other mobile devices.
  • Reply to comments feature.
  • Add dark theme and light theme.
  • Use Navigation 2.0
  • Code the shopping screen.
  • Code the shopping item and shopping list screens.
  • Add Shimmer loading.
  • Design and code Settings Screen.
  • Design and code Edit Profile Screen.
  • Search for specific user functionality.

Screenshots

Onboarding 1 Onboarding 2 Onboarding 3 Welcome Screen
Signup Screen Login Screen Forget Password Screen Feed Screen-Activity
Feed Screen-Discover-1 Feed Screen-Discover-2 Search User Screen Search Recipe Screen
Recipe Detail Screen Bookmark Tab Shopping List Screen Shopping Item Screen
Add Recipe Screen Create Recipe Screen-1 Create Recipe Screen-2 Profile Screen-1
Profile Screen-2 Edit Profile Screen Settings Screen Recipe Post Screen
Comments Screen Chats Screen Chat Messages Screen Following Screen

Directory Structure

πŸ“‚lib
β”œβ”€β”€ main.dart
β”œβ”€β”€ πŸ“‚core
β”‚   β”œβ”€β”€ app_pages.dart
β”‚   β”œβ”€β”€ app_theme.dart
β”‚   └── constants.dart
β”œβ”€β”€ πŸ“‚localization
β”‚   β”œβ”€β”€ app_en.arb
β”‚   β”œβ”€β”€ localization.dart
└── πŸ“‚src
    β”œβ”€β”€ πŸ“‚features
    β”‚   β”œβ”€β”€ πŸ“‚authentication
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ error_screen.dart
    β”‚   β”‚   β”‚   β”œβ”€β”€ forget_password_screen.dart
    β”‚   β”‚   β”‚   β”œβ”€β”€ log_in_screen.dart
    β”‚   β”‚   β”‚   └── sign_up_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ auth_bottom_rich_text.dart
    β”‚   β”‚       β”œβ”€β”€ auth_confirm_button.dart
    β”‚   β”‚       β”œβ”€β”€ log_in_form.dart
    β”‚   β”‚       └── sign_up_form.dart
    β”‚   β”œβ”€β”€ πŸ“‚bookmark_recipe
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚repository
    β”‚   β”‚   β”‚   └── bookmark_interface.dart
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ bookmark_tab.dart
    β”‚   β”‚   β”‚   └── recipe_detail_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ bookmark_card.dart
    β”‚   β”‚       └── bottom_save_button.dart 
    β”‚   β”œβ”€β”€ πŸ“‚chat
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ chat_messages_screen.dart
    β”‚   β”‚   β”‚   └── contacts_list_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ chat_messages.dart
    β”‚   β”‚       β”œβ”€β”€ my_message_bubble.dart
    β”‚   β”‚       └── sender_message_bubble.dart
    β”‚   β”œβ”€β”€ πŸ“‚comment
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   └── comments_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ comment_card.dart
    β”‚   β”‚       └── reply_card.dart
    β”‚   β”œβ”€β”€ πŸ“‚create_recipe_post
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ add_recipe_post_screen.dart
    β”‚   β”‚   β”‚   └── create_recipe_post_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       └── add_fields_section.dart
    β”‚   β”œβ”€β”€ πŸ“‚home
    β”‚   β”‚   └── πŸ“‚screens
    β”‚   β”‚       └── home_screen.dart
    β”‚   β”œβ”€β”€ πŸ“‚onboarding
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   └── onboarding_screen.dart
    β”‚   β”‚   └── πŸ“‚pages
    β”‚   β”‚       β”œβ”€β”€ page_1.dart
    β”‚   β”‚       β”œβ”€β”€ page_2.dart
    β”‚   β”‚       └── page_3.dart
    β”‚   β”œβ”€β”€ πŸ“‚profile
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ edit_profile_screen.dart
    β”‚   β”‚   β”‚   β”œβ”€β”€ followers_screen.dart
    β”‚   β”‚   β”‚   β”œβ”€β”€ following_screen.dart
    β”‚   β”‚   β”‚   └── profile_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ profile_back_button.dart
    β”‚   β”‚       β”œβ”€β”€ profile_cached_background_photo.dart
    β”‚   β”‚       β”œβ”€β”€ profile_default_background_photo.dart
    β”‚   β”‚       β”œβ”€β”€ profile_info_container.dart
    β”‚   β”‚       β”œβ”€β”€ profile_messages_button.dart
    β”‚   β”‚       β”œβ”€β”€ profile_post_section.dart
    β”‚   β”‚       β”œβ”€β”€ profile_send_message_button.dart
    β”‚   β”‚       └── profile_settings_button.dart
    β”‚   β”œβ”€β”€ πŸ“‚recipe_feed
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ activity_tab.dart
    β”‚   β”‚   β”‚   β”œβ”€β”€ discover_tab.dart
    β”‚   β”‚   β”‚   └── feed_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ animated_like_button.dart
    β”‚   β”‚       β”œβ”€β”€ category_list_view.dart
    β”‚   β”‚       β”œβ”€β”€ featured_recipes_list_view.dart
    β”‚   β”‚       β”œβ”€β”€ ingredients_post_section.dart
    β”‚   β”‚       β”œβ”€β”€ popular_recipes_list_view.dart
    β”‚   β”‚       β”œβ”€β”€ post_detail_sliver_app_bar.dart
    β”‚   β”‚       β”œβ”€β”€ post_details_title_section.dart
    β”‚   β”‚       β”œβ”€β”€ recipe_post_card.dart
    β”‚   β”‚       β”œβ”€β”€ recipe_post_detail_screen.dart
    β”‚   β”‚       β”œβ”€β”€ serve_and_cook_time_section.dart
    β”‚   β”‚       β”œβ”€β”€ steps_post_section.dart
    β”‚   β”‚       β”œβ”€β”€ title_and_description_form_section.dart
    β”‚   β”‚       └── today_recipes_list_view.dart
    β”‚   β”œβ”€β”€ πŸ“‚search_recipe
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   β”œβ”€β”€ search_recipe_screen.dart
    β”‚   β”‚   β”‚   └── search_tab.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ circle_tab_indicator.dart
    β”‚   β”‚       β”œβ”€β”€ custom_drop_down.dart
    β”‚   β”‚       β”œβ”€β”€ details_sliver_app_bar.dart
    β”‚   β”‚       β”œβ”€β”€ details_title_section.dart
    β”‚   β”‚       β”œβ”€β”€ ingredients_section.dart
    β”‚   β”‚       β”œβ”€β”€ instructions_section.dart
    β”‚   β”‚       β”œβ”€β”€ nutritions_section.dart
    β”‚   β”‚       β”œβ”€β”€ recipe_card.dart
    β”‚   β”‚       β”œβ”€β”€ recipe_grid_view.dart
    β”‚   β”‚       └── servings_and_ready_in_section.dart
    β”‚   β”œβ”€β”€ πŸ“‚search_user
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   └── search_user_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       └── user_search_result_list.dart
    β”‚   β”œβ”€β”€ πŸ“‚settings
    β”‚   β”‚   β”œβ”€β”€ πŸ“‚screens
    β”‚   β”‚   β”‚   └── settings_screen.dart
    β”‚   β”‚   └── πŸ“‚widgets
    β”‚   β”‚       β”œβ”€β”€ settings_account_detail_button.dart
    β”‚   β”‚       β”œβ”€β”€ settings_back_button.dart
    β”‚   β”‚       β”œβ”€β”€ settings_change_password_button.dart
    β”‚   β”‚       β”œβ”€β”€ settings_log_out_button.dart
    β”‚   β”‚       └── settings_theme_button.dart
    β”‚   β”œβ”€β”€ πŸ“‚splash
    β”‚   β”‚   └── πŸ“‚screens
    β”‚   β”‚       └── splash_screen.dart
    β”‚   └── πŸ“‚welcome
    β”‚       └── πŸ“‚screens
    β”‚           └── welcome_screen.dart
    β”œβ”€β”€ πŸ“‚models
    β”‚   β”œβ”€β”€ πŸ“‚api
    β”‚   β”‚   β”œβ”€β”€ recipe_api_model.dart
    β”‚   β”‚   └── recipe_api_model.g.dart
    β”‚   β”œβ”€β”€ πŸ“‚data_class_models
    β”‚   β”‚   β”œβ”€β”€ ingredient_model.dart
    β”‚   β”‚   β”œβ”€β”€ instruction_model.dart
    β”‚   β”‚   β”œβ”€β”€ nutrients_model.dart
    β”‚   β”‚   β”œβ”€β”€ nutrition_model.dart
    β”‚   β”‚   β”œβ”€β”€ recipe_model.dart
    β”‚   β”‚   └── steps_model.dart
    β”‚   β”œβ”€β”€ πŸ“‚enums
    β”‚   β”‚   β”œβ”€β”€ importance_enum.dart
    β”‚   β”‚   └── message_enum.dart
    β”‚   β”œβ”€β”€ comment_model.dart
    β”‚   β”œβ”€β”€ message.dart
    β”‚   β”œβ”€β”€ recipe_post_model.dart
    β”‚   β”œβ”€β”€ reply_model.dart
    β”‚   β”œβ”€β”€ shopping_item.dart
    β”‚   β”œβ”€β”€ shopping_item.g.dart
    β”‚   └── user_model.dart
    β”œβ”€β”€ πŸ“‚navigation
    β”‚   └── route_generator.dart
    β”œβ”€β”€ πŸ“‚providers
    β”‚   β”œβ”€β”€ auth_provider.dart
    β”‚   β”œβ”€β”€ bookmark_provider.dart
    β”‚   β”œβ”€β”€ message_provider.dart
    β”‚   β”œβ”€β”€ recipe_post_provider.dart
    β”‚   β”œβ”€β”€ settings_provider.dart
    β”‚   β”œβ”€β”€ shopping_provider.dart
    β”‚   β”œβ”€β”€ user_image_provider.dart
    β”‚   └── user_provider.dart
    └── πŸ“‚services
        └── recipe_service.dart

Dependencies

Name Version
google_fonts 2.1.0
provider 6.0.0
flutter_colorpicker 0.6.0
intl 0.17.0
uuid 3.0.4
smooth_page_indicator 1.0.0+2
url_launcher 6.0.10
shared_preferences 2.0.7
flutter_svg 1.1.0
json_annotation 4.6.0
http 0.13.4
flutter_slidable 0.6.0
shimmer 2.0.0
font_awesome_flutter 10.1.0
build_runner 2.1.1
json_serializable 6.3.1
firebase_core 1.20.0
cloud_firestore 3.4.2
firebase_auth 3.6.1
image_picker 0.8.5+3
dartz 0.10.1
get 4.6.5
bubble 1.2.1
hive 2.2.3
hive_flutter 1.1.0
hive_generator 1.1.3
equatable 2.0.5
websafe_svg 2.1.2+2
flutter_native_splash 2.2.8
dropdown_button2 1.7.2
flutter_localizations

Created & Maintained By

MuhammadSabah