{"id":22372204,"url":"https://github.com/keidsid/dicoding_story_fl","last_synced_at":"2025-10-13T09:35:14.371Z","repository":{"id":229402937,"uuid":"776646111","full_name":"KeidsID/dicoding_story_fl","owner":"KeidsID","description":"Projects from Dicoding.com for practicing advanced navigation, media integration (audio, images, and video), and map usage, including Google Maps.","archived":false,"fork":false,"pushed_at":"2025-03-16T16:25:17.000Z","size":21865,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-05T21:50:03.955Z","etag":null,"topics":["camera","clean-architecture","dicoding","flutter-app","go-router","image-picker","material3"],"latest_commit_sha":null,"homepage":"https://keidsid.github.io/dicoding_story_fl","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/KeidsID.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2024-03-24T04:26:12.000Z","updated_at":"2025-03-17T05:07:41.000Z","dependencies_parsed_at":"2025-01-15T14:46:29.556Z","dependency_job_id":"e1f3221d-f1d4-4d32-ac23-1bd8f5c00600","html_url":"https://github.com/KeidsID/dicoding_story_fl","commit_stats":null,"previous_names":["keidsid/dicoding_story_fl"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/KeidsID/dicoding_story_fl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KeidsID%2Fdicoding_story_fl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KeidsID%2Fdicoding_story_fl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KeidsID%2Fdicoding_story_fl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KeidsID%2Fdicoding_story_fl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KeidsID","download_url":"https://codeload.github.com/KeidsID/dicoding_story_fl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KeidsID%2Fdicoding_story_fl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279014537,"owners_count":26085536,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"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":["camera","clean-architecture","dicoding","flutter-app","go-router","image-picker","material3"],"created_at":"2024-12-04T20:34:06.174Z","updated_at":"2025-10-13T09:35:14.353Z","avatar_url":"https://github.com/KeidsID.png","language":"Dart","readme":"# dicoding_story_fl\n\n[dart-badge]: https://img.shields.io/badge/SDK-v3.3.4-red?style=flat\u0026logo=dart\u0026logoColor=2cb8f7\u0026labelColor=333333\u0026color=01579b\n[fl-badge]: https://img.shields.io/badge/SDK-v3.19.6-red?style=flat\u0026logo=flutter\u0026logoColor=2cb8f7\u0026labelColor=333333\u0026color=01579b\n[dicoding-fl]: https://www.dicoding.com/academies/480\n\n![Dart version][dart-badge] ![Flutter][fl-badge]\n\nSimple media social app, project from [dicoding.com flutter class][dicoding-fl]\nas a practice in advanced navigation, use of media (audio, images, and video),\nand use of maps such as Google Maps.\n\n## Table Of Contents\n\n- [Developer Section](#developer-section)\n  - [Requirements](#requirements)\n  - [Dependencies](#dependencies)\n  - [Setup](#setup)\n  - [API Documentation](#api-documentation)\n  - [Project Structures](#project-structures)\n  - [Git Conventions](#git-conventions)\n  - [Others](#others)\n\n## Developer Section\n\n### Requirements\n\n[fl-archive]: https://docs.flutter.dev/release/archive\n[fvm]: https://fvm.app/documentation\n\n- Install [Flutter SDK][fl-archive] with the same version as defined on\n  [`pubspec.yaml`](pubspec.yaml) or [`.fvmrc`](.fvmrc) file.\n\n  You may use [FVM][fvm] (Flutter Version Manager) for easy installation.\n\n  ```sh\n  fvm use\n  ```\n\n### Dependencies\n\n[build_runner]: https://pub.dev/packages/build_runner\n[injectable]: https://pub.dev/packages/injectable\n[freezed]: https://pub.dev/packages/freezed\n[chopper]: https://pub.dev/packages/chopper\n[shared_preferences]: https://pub.dev/packages/shared_preferences\n[go_router]: https://pub.dev/packages/go_router\n[riverpod]: https://riverpod.dev\n\nMain packages that are used as foundation for this project.\n\n- [injectable] -- Dependency injection framework.\n- [freezed] -- Data model with short and simple syntax.\n- [chopper] -- HTTP client service.\n- [shared_preferences] -- Local storage.\n- [go_router] -- Web friendly routing.\n- [riverpod] -- State management.\n\nMost of them need to generate its utilities with [build_runner].\n\n### Setup\n\n1. Install dependencies\n\n   ```sh\n   flutter pub get\n   ```\n\n2. Intialize git hooks to validate commit messages\n\n   ```sh\n   dart run husky install\n   ```\n\n3. Create `.env` file. Use [`.env.example`](./.env.example) as a template.\n\n4. You may also need to change Google Maps API key on android, ios, and web\n   configs if you need to debug the app custom maps.\n\n   Docs: \u003chttps://pub.dev/packages/google_maps_flutter\u003e\n\n5. Build project environment.\n\n   ```sh\n   dart run build_runner build -d # generate code utils\n   flutter gen-l10n # generate localizations\n   ```\n\n6. Now you're good to go!\n\n   ```sh\n   # Check connected devices\n   flutter devices\n\n   # Check available emulators\n   flutter emulators\n\n   # Run app\n   flutter run -d \u003cdevice-id\u003e\n   ```\n\n### API Documentation\n\n[dicoding-story-api]: https://story-api.dicoding.dev/v1\n[google-maps-docs]: https://developers.google.com/maps/get-started\n\n- [Dicoding Story API Docs][dicoding-story-api].\n- [Google Maps API Docs][google-maps-docs].\n- [Google Maps Proxy API Docs](https://nest-gmaps-api.fly.dev).\n  - [Source Code](https://github.com/KeidsID/nest-gmaps-api)\n\n### Project Structures\n\n[clean-architecture]: https://medium.com/@DrunknCode/clean-architecture-simplified-and-in-depth-guide-026333c54454\n\nThis project is follow the [Clean Architecture][clean-architecture] principles.\n\n[main.dart]: ./lib/main.dart\n[locator]: ./lib/service_locator.dart\n[interfaces-doc]: ./lib/interfaces/modules/README.md\n[l10n-doc]: ./lib/interfaces/libs/l10n/README.md\n\n- `/lib` -- Source code\n\n  - [`main.dart`][main.dart] -- Application entry point.\n\n  - [`service_locator.dart`][locator] -- Service locator to get\n    [injectable][injectable] services.\n\n  - `/domain` -- Domain layer (Entities and services abstractions).\n\n  - `/infrastructures` -- Infrastructure layer (Services implementations).\n\n  - `/interfaces` -- Interfaces layer (Application routes, states, etc).\n  \n    - `/libs` -- Common constants, widgets, providers, and other utilities.\n\n      - `/l10n` -- Application localizations. Please read the\n        [README.md][l10n-doc].\n\n    - `/modules` -- Application routes. Please read the\n      [README.md][interfaces-doc].\n\n  - `/use_cases` -- Application logic layer.\n\n  - `**/libs` -- Common constants, or other utilities used by folder it belongs,\n    e.g `/lib/libs` is global libs, `/lib/domain/libs` is domain libs, and so on.\n\n### Git Conventions\n\n[conventional-commits]: https://www.conventionalcommits.org\n\nWe use [Conventional Commits][conventional-commits] to handle Git commit\nmessages, and Github PR titles.\n\nLook at [`dangerfile.dart`](dangerfile.dart) to see supported commit\ntypes/scopes (the `GitlintConfig` class).\n\n#### Issue Title\n\n```sh\n\u003ctype\u003e(\u003cscopes(optional)\u003e): \u003ccontent\u003e\n```\n\nExamples:\n\n- `feat: add simple auth`\n- `bug(interfaces): unresponsive post story page`\n\n##### Commit Message / PR Title\n\n```sh\n\u003ctype\u003e(\u003cscopes(optional)\u003e): \u003ccontent\u003e ds-\u003cissue-number\u003e\n```\n\nExamples:\n\n- `feat: add auth repo abstraction ds-25`\n- `fix(interfaces): fix auth repo impl ds-250`\n- `fix(domain/infrastructures): fix invalid stories request ds-502`\n\n##### Branch Name\n\n```sh\n\u003ctype\u003e-\u003ccontent\u003e-ds-\u003cissue-number\u003e\n```\n\nExamples:\n\n- `chore-commitlint-ds-1`\n- `fix-unresponsive-home-page-ds-250`\n\n### Others\n\nOther documentations that might be useful:\n\n- [Dart Docs](https://dart.dev/guides)\n- [Flutter Docs](https://docs.flutter.dev/)\n- [Material Design](https://material.io)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeidsid%2Fdicoding_story_fl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeidsid%2Fdicoding_story_fl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeidsid%2Fdicoding_story_fl/lists"}