Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jamesbrel/flutter_clean_and_modular_arch_with_flutter_bloc

Clean, modular architecture is a particularly interesting concept... for a project that is structured, maintainable and scalable without a hitch...
https://github.com/jamesbrel/flutter_clean_and_modular_arch_with_flutter_bloc

bloc clean-architecture dart flutter flutter-bloc mobile modularization

Last synced: about 2 months ago
JSON representation

Clean, modular architecture is a particularly interesting concept... for a project that is structured, maintainable and scalable without a hitch...

Awesome Lists containing this project

README

        

# Flutter Mobile : Clean and Modular Architecture

### Author : James Brel

### Alias : The Coder

### Contact : [email protected]
---

logo

---
## Architecture
the architecture of each feature is based on the clean architecture of Uncle Bob which is constituted mainly of 3 layers :
- Data
- Domain
- States Holder

```
πŸ“¦features
β”— πŸ“‚fetch_hello_world
┃ ┣ πŸ“‚states_holder
┃ ┣ πŸ“‚data
┃ β”— πŸ“‚domain
```

## General Folder Structure Tree
```
πŸ“¦project
┣ πŸ“‚.env
┃ ┣ πŸ“œdev.json
┃ ┣ πŸ“œprod.json
┃ β”— πŸ“œstaging.json
┣ πŸ“‚.vscode
┃ β”— πŸ“œlaunch.json
┣ πŸ“‚android
┃ ┣ πŸ“‚app
┃ ┃ ┣ πŸ“‚src
┃ ┃ ┃ β”— πŸ“œAndroidManifest.xml
┃ ┃ ┣ πŸ“œbuild.gradle
┃ ┃ β”— πŸ“œproguard-rules.pro
┃ ┣ πŸ“œkey.properties
┃ β”— πŸ“œreadme.md
┣ πŸ“‚assets
┃ ┣ πŸ“‚fonts
┃ ┃ β”— πŸ“œ.gitkeep
┃ ┣ πŸ“‚images
┃ ┃ ┣ πŸ“‚jpg
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┣ πŸ“‚png
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ β”— πŸ“‚svg
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┣ πŸ“‚languages
┃ ┃ ┣ πŸ“œen.json
┃ ┃ β”— πŸ“œfr.json
┃ β”— πŸ“œreadme.md
┣ πŸ“‚integration_test
┃ β”— πŸ“‚views
┃ ┃ ┣ πŸ“‚screens
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ β”— πŸ“‚widgets
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┣ πŸ“‚lib
┃ ┣ πŸ“‚src
┃ ┃ ┣ πŸ“‚core
┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┣ πŸ“‚assets_config
┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┣ πŸ“‚injectors_config
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œinjector.config.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œinjector.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚language_config
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œtranslations_delegate.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œtranslator.dart
┃ ┃ ┃ ┃ β”— πŸ“‚windows_config
┃ ┃ ┃ ┃ ┃ β”— πŸ“œwindow_config.dart
┃ ┃ ┃ ┣ πŸ“‚router
┃ ┃ ┃ ┃ ┣ πŸ“œauto_routes.dart
┃ ┃ ┃ ┃ β”— πŸ“œauto_routes.gr.dart
┃ ┃ ┃ ┣ πŸ“‚themes
┃ ┃ ┃ ┃ ┣ πŸ“œdark_theme.dart
┃ ┃ ┃ ┃ β”— πŸ“œlight_theme.dart
┃ ┃ ┃ β”— πŸ“œinit.dart
┃ ┃ ┣ πŸ“‚modules
┃ ┃ ┃ β”— πŸ“‚hello_world_mod
┃ ┃ ┃ ┃ ┣ πŸ“‚features
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚fetch_hello_world
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚data
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚local_source
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsay_the_hello_world_abst.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsay_the_hello_world_impl.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚models
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚remote_source
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚models
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚reposit_impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œthe_system_say_hello_world_reposit_impl.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚domain
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚entities
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚reposit_absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œthe_system_say_hello_world_reposit_abst.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚usecases
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsystem_say_hello_world_usecase.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚states_holder
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚hello_world_bloc
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhello_world_bloc.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhello_world_event.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œhello_world_state.dart
┃ ┃ ┃ ┃ β”— πŸ“‚ui
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚screens
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œwelcome_screen.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚widgets
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ β”— πŸ“‚shared
┃ ┃ ┃ ┣ πŸ“‚constants
┃ ┃ ┃ ┃ ┣ πŸ“œcolors_const.dart
┃ ┃ ┃ ┃ ┣ πŸ“œdouble_const.dart
┃ ┃ ┃ ┃ ┣ πŸ“œenvs_const.dart
┃ ┃ ┃ ┃ ┣ πŸ“œint_const.dart
┃ ┃ ┃ ┃ ┣ πŸ“œlang_const.dart
┃ ┃ ┃ ┃ ┣ πŸ“œroutes_const.dart
┃ ┃ ┃ ┃ β”— πŸ“œstring_const.dart
┃ ┃ ┃ ┣ πŸ“‚extensions
┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┣ πŸ“‚global
┃ ┃ ┃ ┃ β”— πŸ“œstring_variable.dart
┃ ┃ ┃ ┣ πŸ“‚helpers
┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┣ πŸ“‚services
┃ ┃ ┃ ┃ ┣ πŸ“‚cache
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œcache_instance.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚enums
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œshared_preference_enum.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚shared_preference_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œshared_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œshared_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œshared_put_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚shared_preference_streaming_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstream_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstream_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstream_put_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚storage_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstorage_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstorage_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstorage_put_request.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚connection
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œconnection_instance.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œconnection_checker_request.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚firebase
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirebase_config.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_instance.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚database
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œuser_model.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚options
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚dev
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_emulators_dev.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚staging
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚analytics_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œanalytic_get_event_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œanalytic_observer_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚auth_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œphone_auth_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚firebase_storage_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirebase_storage_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_storage_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚firestore_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirestore_update_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚firestore_stream_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirestore_stream_get_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚utils
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œconvert_util.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œroot_util.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstatus_util.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstring_util.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚http
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚apis
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œaccount_api.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œdio_instance.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œhttp_overrides_helper.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œhttp_update_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œapi_version.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚image
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œimage_instance.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚messages
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œnote_message.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_camera_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_compress_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_copper_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œimage_gallery_request.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚isar
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_config.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_instance.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚database
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚user_models
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚isar_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_update_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚isar_stream_requests
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_get_stream_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚utils
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstatuts_util.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚jwt
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œjwt_decode_request.dart
┃ ┃ ┃ ┃ β”— πŸ“‚security
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œdecrypt_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œencrypt_request.dart
┃ ┃ ┃ β”— πŸ“‚ui
┃ ┃ ┃ ┃ ┣ πŸ“‚screens
┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ β”— πŸ“‚widgets
┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ β”— πŸ“œmain.dart
┣ πŸ“‚test
┃ β”— πŸ“œ.gitkeep
┣ πŸ“œ.gitignore
┣ πŸ“œanalysis_options.yaml
β”— πŸ“œflutter_native_splash.yaml
```
## Lib Folder Structure Tree
```
πŸ“¦lib
┣ πŸ“‚src
┃ ┣ πŸ“‚core
┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┣ πŸ“‚assets_config
┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┣ πŸ“‚injectors_config
┃ ┃ ┃ ┃ ┣ πŸ“œinjector.config.dart
┃ ┃ ┃ ┃ β”— πŸ“œinjector.dart
┃ ┃ ┃ ┣ πŸ“‚language_config
┃ ┃ ┃ ┃ ┣ πŸ“œtranslations_delegate.dart
┃ ┃ ┃ ┃ β”— πŸ“œtranslator.dart
┃ ┃ ┃ β”— πŸ“‚windows_config
┃ ┃ ┃ ┃ β”— πŸ“œwindow_config.dart
┃ ┃ ┣ πŸ“‚router
┃ ┃ ┃ ┣ πŸ“œauto_routes.dart
┃ ┃ ┃ β”— πŸ“œauto_routes.gr.dart
┃ ┃ ┣ πŸ“‚themes
┃ ┃ ┃ ┣ πŸ“œdark_theme.dart
┃ ┃ ┃ β”— πŸ“œlight_theme.dart
┃ ┃ β”— πŸ“œinit.dart
┃ ┣ πŸ“‚modules
┃ ┃ β”— πŸ“‚hello_world_mod
┃ ┃ ┃ ┣ πŸ“‚features
┃ ┃ ┃ ┃ β”— πŸ“‚fetch_hello_world
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚data
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚local_source
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsay_the_hello_world_abst.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsay_the_hello_world_impl.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚models
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚remote_source
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚models
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚reposit_impls
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œthe_system_say_hello_world_reposit_impl.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚domain
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚entities
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚reposit_absts
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œthe_system_say_hello_world_reposit_abst.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚usecases
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œsystem_say_hello_world_usecase.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚states_holder
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“‚hello_world_bloc
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhello_world_bloc.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhello_world_event.dart
┃ ┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œhello_world_state.dart
┃ ┃ ┃ β”— πŸ“‚ui
┃ ┃ ┃ ┃ ┣ πŸ“‚screens
┃ ┃ ┃ ┃ ┃ β”— πŸ“œwelcome_screen.dart
┃ ┃ ┃ ┃ β”— πŸ“‚widgets
┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ β”— πŸ“‚shared
┃ ┃ ┣ πŸ“‚constants
┃ ┃ ┃ ┣ πŸ“œcolors_const.dart
┃ ┃ ┃ ┣ πŸ“œdouble_const.dart
┃ ┃ ┃ ┣ πŸ“œenvs_const.dart
┃ ┃ ┃ ┣ πŸ“œint_const.dart
┃ ┃ ┃ ┣ πŸ“œlang_const.dart
┃ ┃ ┃ ┣ πŸ“œroutes_const.dart
┃ ┃ ┃ β”— πŸ“œstring_const.dart
┃ ┃ ┣ πŸ“‚extensions
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┣ πŸ“‚global
┃ ┃ ┃ β”— πŸ“œstring_variable.dart
┃ ┃ ┣ πŸ“‚helpers
┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┣ πŸ“‚services
┃ ┃ ┃ ┣ πŸ“‚cache
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ β”— πŸ“œcache_instance.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚enums
┃ ┃ ┃ ┃ ┃ β”— πŸ“œshared_preference_enum.dart
┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚shared_preference_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œshared_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œshared_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œshared_put_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚shared_preference_streaming_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstream_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstream_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstream_put_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚storage_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstorage_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstorage_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œstorage_put_request.dart
┃ ┃ ┃ ┣ πŸ“‚connection
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ β”— πŸ“œconnection_instance.dart
┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ β”— πŸ“œconnection_checker_request.dart
┃ ┃ ┃ ┣ πŸ“‚firebase
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirebase_config.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_instance.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚database
┃ ┃ ┃ ┃ ┃ β”— πŸ“œuser_model.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚options
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚dev
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_emulators_dev.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚staging
┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚analytics_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œanalytic_get_event_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œanalytic_observer_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚auth_requests
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œphone_auth_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚firebase_storage_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirebase_storage_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirebase_storage_post_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚firestore_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œfirestore_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirestore_update_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚firestore_stream_requests
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œfirestore_stream_get_request.dart
┃ ┃ ┃ ┃ β”— πŸ“‚utils
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œconvert_util.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œroot_util.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œstatus_util.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œstring_util.dart
┃ ┃ ┃ ┣ πŸ“‚http
┃ ┃ ┃ ┃ ┣ πŸ“‚apis
┃ ┃ ┃ ┃ ┃ β”— πŸ“œaccount_api.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œdio_instance.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œhttp_overrides_helper.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_get_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œhttp_post_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œhttp_update_request.dart
┃ ┃ ┃ ┃ β”— πŸ“œapi_version.dart
┃ ┃ ┃ ┣ πŸ“‚image
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ β”— πŸ“œimage_instance.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚messages
┃ ┃ ┃ ┃ ┃ β”— πŸ“œnote_message.dart
┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_camera_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_compress_request.dart
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œimage_copper_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œimage_gallery_request.dart
┃ ┃ ┃ ┣ πŸ“‚isar
┃ ┃ ┃ ┃ ┣ πŸ“‚configs
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_config.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_instance.dart
┃ ┃ ┃ ┃ ┣ πŸ“‚database
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚user_models
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ ┃ ┣ πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“‚isar_requests
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_delete_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_get_request.dart
┃ ┃ ┃ ┃ ┃ ┃ ┣ πŸ“œisar_post_request.dart
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_update_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“‚isar_stream_requests
┃ ┃ ┃ ┃ ┃ ┃ β”— πŸ“œisar_get_stream_request.dart
┃ ┃ ┃ ┃ β”— πŸ“‚utils
┃ ┃ ┃ ┃ ┃ β”— πŸ“œstatuts_util.dart
┃ ┃ ┃ ┣ πŸ“‚jwt
┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ β”— πŸ“œjwt_decode_request.dart
┃ ┃ ┃ β”— πŸ“‚security
┃ ┃ ┃ ┃ β”— πŸ“‚requests
┃ ┃ ┃ ┃ ┃ ┣ πŸ“œdecrypt_request.dart
┃ ┃ ┃ ┃ ┃ β”— πŸ“œencrypt_request.dart
┃ ┃ β”— πŸ“‚ui
┃ ┃ ┃ ┣ πŸ“‚screens
┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
┃ ┃ ┃ β”— πŸ“‚widgets
┃ ┃ ┃ ┃ β”— πŸ“œ.gitkeep
β”— πŸ“œmain.dart
```

## Usage and Configuration

Once you have created your application or flutter project, you clone the architecture from Github, to start on a good basis

Note:
the predefined files, such as welcome.dart in the front end and other folders, as well as example_test file, are only files that will allow you to be on the right track and to get a good understanding of the architecture.

- step_1: Installation of pre_packages for pre-launch
Inside the pubspec.yaml file, you must integrate firstly the following dependencies :

```yaml
-----------StartUp Dependencies------------
flutter_localizations:
sdk: flutter
intl: ^last version
flutter_native_splash: ^last version
auto_route: ^last version
equatable: ^last version
get_it: ^last version
injectable: ^last version
flutter_bloc: ^last version
bloc: ^last version
multiple_result: ^last version
fluttertoast: ^last version
----------------------------
```
- step_1: Installation of dev_dependencies
Inside the pubspec.yaml file, you must integrate firstly the following packages :

```yaml
auto_route_generator: ^last version
injectable_generator: ^last version
build_runner: ^last version
```
these packages will allow you to easily activate the various files imported into the architecture.
then, you just have to follow, the readme.md in the folder **assets**

- step_2: Integration of the architecture
once in the Clean and Modular Architecture folder, you copy all its content to paste it in your project.

- Bonus: The dependencies you need for the various services and config

- ### Cache
```yaml
flutter_secure_storage: ^last version
shared_preferences: ^last version
streaming_shared_preferences: ^last version
```
- ### Connexion
```yaml
internet_connection_checker_plus: ^last version
```
- ### Firebase
```yaml
firebase_core: ^last version
firebase_app_check: ^last version
firebase_auth: ^last version
cloud_firestore: ^last version
firebase_storage: ^last version
firebase_messaging: ^last version
firebase_crashlytics: ^last version
firebase_analytics: ^last version
cloud_functions: ^last version
```
- ### Http
```yaml
dio: ^last version
```
- ### Image
```yaml
image_picker: ^last version
flutter_native_image: ^last version
image_cropper: ^last version
```
- ### Isar
```yaml
isar: ^last version
isar_flutter_libs: ^last version
isar_generator: ^last version
```
- ### Jwt
```yaml
jwt_decoder: ^last version
```
- ### assets_gen
```yaml
flutter_svg: ^last version
flutter_gen: ^last version
flutter_gen_runner: ^last version
```
add this following line in
pubspec.yaml
```yaml
flutter_gen:
# Optional
output: lib/src/core/configs/assets_config
# Optional
line_length: 80
# Optional
parse_metadata: false

# Optional
integrations:
flutter_svg: true
flare_flutter: true
rive: true
lottie: false

assets:
# Optional
enabled: true
# Optional
outputs:
# Optional
# Set to true if you want this package to be a package dependency
# See: https://flutter.dev/docs/development/ui/assets-and-images#from-packages
package_parameter_enabled: true
# Optional
# Available values:
# - camel-case
# - snake-case
# - dot-delimiter
style: dot-delimiter
class_name: Assets
exclude: []

fonts:
# Optional
enabled: true
# Optional
outputs:
class_name: FontFamily
```
after you read the doc : https://pub.dev/packages/flutter_gen

- ### test
add in dev_dependencies
```yaml
bloc_test: ^last version
mocktail: ^last version
integration_test:
sdk: flutter
```

---

Copyright Β© 2024 James Brel All Rights Reserved