{"id":50577751,"url":"https://github.com/william-franco/bloc-abstraction-example","last_synced_at":"2026-06-04T23:31:46.150Z","repository":{"id":272344564,"uuid":"916288351","full_name":"william-franco/bloc-abstraction-example","owner":"william-franco","description":"Example of using BLoC/Cubit in a fully abstracted way in Flutter.","archived":false,"fork":false,"pushed_at":"2026-03-22T23:06:27.000Z","size":184,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-23T17:38:23.854Z","etag":null,"topics":["bloc-cubit","feature-first","mvvm-architecture","repository-pattern","solid-principles"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/william-franco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-13T20:07:56.000Z","updated_at":"2026-03-22T23:06:31.000Z","dependencies_parsed_at":"2025-01-13T20:38:51.621Z","dependency_job_id":"511dc69a-de2f-4c45-bf14-6610a7599a1d","html_url":"https://github.com/william-franco/bloc-abstraction-example","commit_stats":null,"previous_names":["william-franco/bloc-abstraction-example"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/william-franco/bloc-abstraction-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/william-franco%2Fbloc-abstraction-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/william-franco%2Fbloc-abstraction-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/william-franco%2Fbloc-abstraction-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/william-franco%2Fbloc-abstraction-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/william-franco","download_url":"https://codeload.github.com/william-franco/bloc-abstraction-example/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/william-franco%2Fbloc-abstraction-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33924832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bloc-cubit","feature-first","mvvm-architecture","repository-pattern","solid-principles"],"created_at":"2026-06-04T23:31:46.069Z","updated_at":"2026-06-04T23:31:46.136Z","avatar_url":"https://github.com/william-franco.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bloc Abstraction Example\n\nUnder construction.\n\n\n## Project Structure\n\nThe project is structured in a modular way, where each new functionality should be a new module containing its particularities, and things common to the entire project should be in the `common` module.\n\n\n## Folder architecture\n\n```\nsrc/\n    ├── common/\n    │   ├── constants/\n    │   ├── dependency_injectors/\n    │   ├── enums/\n    │   ├── extensions/\n    │   ├── patterns/\n    │   ├── routes/\n    │   ├── services/\n    │   ├── state_management/\n    │   └── widgets/\n    └── features/\n        ├── feature_one/\n        │   ├── models/\n        │   ├── repositories/\n        │   ├── routes/\n        │   ├── view_models/\n        │   └── views/\n        └── feature_two/\n            ├── models/\n            ├── repositories/\n            ├── routes/\n            ├── view_models/\n            └── views/\n```\n\n\n## Coverage\n\nflutter pub run build_runner build --delete-conflicting-outputs\n\nflutter test --coverage\n\ngenhtml coverage/lcov.info -o coverage/html\n\nopen coverage/html/index.html\n\n\n## ScreenShots\n\n| Image 1 | Image 2 | Image 3 |\n|----------|----------|----------|\n| ![App Screenshot](assets/screenshots/screen-1.png) | ![App Screenshot](assets/screenshots/screen-2.png) | ![App Screenshot](assets/screenshots/screen-3.png) |\n\n| Image 4 | Image 5 | Image 6 |\n|----------|----------|----------|\n| ![App Screenshot](assets/screenshots/screen-4.png) | ![App Screenshot](assets/screenshots/screen-5.png) | ![App Screenshot](assets/screenshots/screen-6.png) |\n\n\n## Examples of commits\n\n```\ngit add . \u0026\u0026 git commit -m \":rocket: Initial commit.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":building_construction: Added initial project architecture.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":building_construction: Update project architecture.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":memo: Updated project documentation.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":memo: Updated code documentation.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":white_check_mark: Added feature xyz.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":wrench: Fixed xyz usage.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":heavy_minus_sign: Removed xyz.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":memo: Adjusted project imports.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":arrow_up: Updated dependencies.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":arrow_down: Removed dependencies.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":wastebasket: Removed unused code.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":test_tube: Added test functionality xyz.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":construction_worker: Building in progress.\" \u0026\u0026 git push\ngit add . \u0026\u0026 git commit -m \":construction_worker: Added CI build system.\" \u0026\u0026 git push\n```\n\n\n## License\n\nMIT License\n\nCopyright (c) 2026 William Franco\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliam-franco%2Fbloc-abstraction-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliam-franco%2Fbloc-abstraction-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliam-franco%2Fbloc-abstraction-example/lists"}