Skip to content

Mohamed-said-salah/cross_platform_carecomm_assessment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CareComm Task - Product Listing App πŸ“±

CareComm Task is a cross-platform product listing application built using Flutter. The app allows users to browse products, view details, and manage their favorite items. It is designed with a responsive layout to support mobile, tablet, and desktop screens seamlessly.

Languages and frameworks πŸ“‘

  • Flutter: version 3.27.2
  • Dart: version 3.6.1

Packages & Plugins πŸ”Ž

State Management & Dependency Injection
  • flutter_bloc - State management.
  • hydrated_bloc - Persistent flutter bloc state management after app closed.
  • get_it - Service locator for dependency injection.
Networking & HTTP
  • http - A powerful HTTP client for making network requests.
  • http_mock_adapter - A Dio adapter for mocking API responses in tests.
Routing & Navigation
  • auto_route - Declarative and type-safe routing for Flutter.
  • auto_route_generator - Code generation for auto_route.
Local Storage & Caching
  • shared_preferences - Persistent key-value storage.
  • path_provider - Provides access to commonly used storage locations.
  • fast_cached_network_image - Efficient caching for network images.
UI & Responsiveness
  • flutter_screenutil - Adaptive screen sizing for different devices.
  • skeletonizer - Adds skeleton loading effects to UI components.
Testing & Code Generation
  • mockito - Mocking framework for unit testing.
  • bloc_test - Unit testing utilities for BLoC.
  • build_runner - Code generation tool for Flutter.

Features πŸ₯‡

  • Product Listing: Displays a list of products with a smooth UI.
  • Favorites Management: Users can mark products as favorites for quick access.
  • Adaptive UI: The app adjusts its layout based on the screen size (Responsive design for mobile, tablet, and desktop).
  • State Management: Powered by Flutter BLoC for efficient data handling.
  • Dark Mode Support: Toggle between light and dark themes dynamically.
  • Navigation: Implemented using AutoRoute for seamless routing across screens.
  • Supports both Web and Mobile platforms

IDEs πŸ’»

  • VS code
  • Android Studio

Get the App πŸ“±

Setup πŸ’½

To get a local copy up and running, follow these instructions.

Prerequisites

  • Flutter SDK: Ensure Flutter is installed on your system. Follow Flutter installation guide
  • Android Studio or Visual Studio Code for development and testing.
  • clone the repository
  • Ensure your device's Internet connection is enabled.
  • and run the app on any plugged physical device, emulator or web browser.

Installation

   # Clone the repository
   git clone https://github.com/Mohamed-said-salah/cross_platform_carecomm_assessment.git
   cd cross_platform_carecomm_assessment
   # Install dependencies
   flutter pub get
   # Run the application on an physical Android device, emulator, or web browswer
   flutter run
   # Build the APK
   flutter build apk --release

Running Tests πŸ§ͺ

To ensure the project functions correctly, you can run the unit and widget tests using the following commands:

   # Run all tests
   flutter test
   # Run tests with coverage report
   flutter test --coverage

Project Structure

   .
   └── lib/
       β”œβ”€β”€ core/
       β”‚   β”œβ”€β”€ router/
       β”‚   β”‚   └── app_router.dart
       β”‚   β”œβ”€β”€ services/
       β”‚   β”‚   β”œβ”€β”€ cache_manager.dart
       β”‚   β”‚   └── favorites_caching_service.dart
       β”‚   β”œβ”€β”€ theme/
       β”‚   β”‚   β”œβ”€β”€ app_colors.dart
       β”‚   β”‚   β”œβ”€β”€ responsive_manager.dart
       β”‚   β”‚   └── text_styles.dart
       β”‚   β”œβ”€β”€ constants.dart
       β”‚   └── di.dart
       β”œβ”€β”€ data/
       β”‚   β”œβ”€β”€ models/
       β”‚   β”‚   └── product_model.dart
       β”‚   └── repos/
       β”‚       └── products_repo.dart
       β”œβ”€β”€ logic/
       β”‚   β”œβ”€β”€ bloc
       β”‚   β”œβ”€β”€ cubit/
       β”‚   β”‚   β”œβ”€β”€ theme_cubit.dart
       β”‚   β”‚   β”œβ”€β”€ products_cubit.dart
       β”‚   β”‚   β”œβ”€β”€ products_state.dart
       β”‚   β”‚   β”œβ”€β”€ favorites_cubit.dart
       β”‚   β”‚   └── favorites_state.dart
       β”‚   └── controllers
       β”œβ”€β”€ views/
       β”‚   β”œβ”€β”€ components/
       β”‚   β”‚   β”œβ”€β”€ buttons/
       β”‚   β”‚   β”‚   β”œβ”€β”€ animated_theme_switcher.dart
       β”‚   β”‚   β”‚   └── product_favorite_button.dart
       β”‚   β”‚   β”œβ”€β”€ cards/
       β”‚   β”‚   β”‚   └── product_card.dart
       β”‚   β”‚   β”œβ”€β”€ spaces/
       β”‚   β”‚   β”‚   β”œβ”€β”€ horizontal_space.dart
       β”‚   β”‚   β”‚   └── vertical_space.dart
       β”‚   β”‚   β”œβ”€β”€ tiles/
       β”‚   β”‚   β”‚   └── product_tile.dart
       β”‚   β”‚   └── product_image.dart
       β”‚   └── screens/
       β”‚       β”œβ”€β”€ home/
       β”‚       β”‚   β”œβ”€β”€ home_screen.dart
       β”‚       β”‚   β”œβ”€β”€ products_tab.dart
       β”‚       β”‚   └── favorites_tab.dart
       β”‚       └── product_details_screen.dart
       β”œβ”€β”€ app.dart
       └── main.dart

ScreenShots πŸ–ΌοΈ

Web


dark mode

Mobile


dark mode

Tablet


dark mode