This app follow clean architecture proposed By Uncle Bob I used BloC as state management to improve widget rebuilding performance.
You can see a Demo video Here
onBoarding 1 | onBoarding 2 | onBoarding 4 | Splash Screen |
---|---|---|---|
- Authentication (Login/Register)
- Email sign-in backed up by Reset Password
- Beautiful onboarding layout and animations
- Shop by category and trending products
- Search products with Its Name
- Filter products by ratings or price
- Products, Favorite can be accessed in-app
- Edit account details easily
- Chang Password easily
- Order products through quote based system
- Easily editable product widgets (Cards, Slider, Grids, Lists and more!)
- Beautiful Product pages with reviews, description and features
- Caching data in local database (Hive)
- Adaptive UI (changes color based on Mode dark or light)
- Google Map (Get current Location & Search specific Location)
- payment integration with paymob
lib
├───core
│ ├───colors
│ ├───error
│ ├───local
│ ├───network
│ ├───theme
│ │ ├───bloc
│ │ └───local_theme
│ ├───usecase
│ └───utilities
├── dependency_injection.dart
├── main.dart
└───features
├───cart
│ ├───data
│ │ ├───datasource
│ │ └───models
│ └───presentation
│ ├───bloc
│ │ └───cubit
│ ├───views
│ └───widgets
├───favorite
│ └───presentation
│ ├───bloc
│ └───views
├───forgotpass&verifyemail
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───forgotpass&verifyemail_bloc
│ └───views
├───home
│ ├───presentation
│ │ ├───bloc
│ │ └───view
│ └───widgets
├───login
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domin
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ ├───view
│ └───widgets
├───payment
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositrories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ └───views
├───profile
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ ├───views
│ └───widgets
├───register
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ └───views
├───setpassword
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ └───views
├───shop
│ ├───data
│ │ ├───datasources
│ │ ├───models
│ │ └───repositories
│ ├───domain
│ │ ├───entities
│ │ ├───repositories
│ │ └───usecases
│ └───presentation
│ ├───bloc
│ ├───views
│ └───widgets
└───splash&onboarding
├───data
│ └───models
└───presentation
├───views
└───widgets
CLOUDINARY_NAME=<Your Cloudinary name>
CLOUDINARY_API_KEY<Your Cloudinary API key>
CLOUDINARY_SECRET_KEY=<Your Cloudinary Secret key>
MAP_API_KEY=<Your Google Map Api key>
PAYMENT_API_KEY=<Paymob Api Key>
INTEGRATION_ID_CARD=<Paymob Integration Id Card>
BASE_URL=https://newshopack.onrender.com/api/v1 //API Base Url