{"id":20876430,"url":"https://github.com/iniakunhuda/flutter_riverpod_strapi","last_synced_at":"2025-05-12T15:32:19.033Z","repository":{"id":229417406,"uuid":"621596173","full_name":"iniakunhuda/flutter_riverpod_strapi","owner":"iniakunhuda","description":"Simple CRUD Riverpod Flutter + Strapi API + Offline Database with Isar","archived":false,"fork":false,"pushed_at":"2024-03-24T07:58:10.000Z","size":1851,"stargazers_count":29,"open_issues_count":0,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-01T07:45:07.049Z","etag":null,"topics":["dart","flutter","flutter-riverpod","riverpod"],"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/iniakunhuda.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}},"created_at":"2023-03-31T01:42:44.000Z","updated_at":"2025-02-17T13:19:37.000Z","dependencies_parsed_at":"2024-03-24T08:36:51.858Z","dependency_job_id":null,"html_url":"https://github.com/iniakunhuda/flutter_riverpod_strapi","commit_stats":null,"previous_names":["iniakunhuda/flutter_riverpod_strapi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iniakunhuda%2Fflutter_riverpod_strapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iniakunhuda%2Fflutter_riverpod_strapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iniakunhuda%2Fflutter_riverpod_strapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iniakunhuda%2Fflutter_riverpod_strapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iniakunhuda","download_url":"https://codeload.github.com/iniakunhuda/flutter_riverpod_strapi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253765985,"owners_count":21960826,"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","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":["dart","flutter","flutter-riverpod","riverpod"],"created_at":"2024-11-18T06:51:29.223Z","updated_at":"2025-05-12T15:32:18.603Z","avatar_url":"https://github.com/iniakunhuda.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Flutter Riverpod Strapi\n![GitHub stars](https://img.shields.io/github/stars/iniakunhuda/flutter_riverpod_strapi?style=social)\n![GitHub forks](https://img.shields.io/github/forks/iniakunhuda/flutter_riverpod_strapi?style=social)\n![GitHub watchers](https://img.shields.io/github/watchers/iniakunhuda/flutter_riverpod_strapi?style=social)\n\n[![GitHub license](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/iniakunhuda/flutter_riverpod_strapi/blob/master/LICENSE)\n[![platform](https://img.shields.io/badge/platform-Flutter-blue.svg)](https://flutter.dev/)\n[![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/iniakunhuda/flutter_riverpod_strapi)\n\n## Quick start\nThis is a normal flutter app. You should follow the instructions in the [official documentation](https://flutter.io/docs/get-started/install).\nThis project uses **Riverpod** to separate the business logic with UI itself.\nAnd also on this project uses **Clean Architecture** approach to separate each feature.\n\n## Structure 🔥\n\n    ├── lib\n    │   ├── core\n    │   │   ├── api\n    │   │   │   └── endpoints.dart\n    │   │   ├── constant\n    │   │   │   └── constant.dart\n    │   │   ├── database\n    │   │   │   └── database.dart\n    │   │   ├── helper\n    │   │   │   ├── app_exception.dart\n    │   │   │   ├── app_router.dart\n    │   │   │   └── network_detector.dart\n    │   │   └── http\n    │   │       ├── api_provider.dart\n    │   │       └── api_response.dart\n    │   ├── features\n    │   │   ├── contact\n    │   │   │   ├── data\n    │   │   │   │   ├── database\n    │   │   │   │   │   └── contact_db.dart\n    │   │   │   │   ├── datasource\n    │   │   │   │   │   ├── contact_datasource.dart\n    │   │   │   │   │   ├── contact_local_datasource.dart\n    │   │   │   │   │   └── contact_remote_datasource.dart\n    │   │   │   │   ├── dto\n    │   │   │   │   │   ├── contact_dto.dart\n    │   │   │   │   │   ├── error_dto.dart\n    │   │   │   │   ├── model\n    │   │   │   │   │   ├── contact_model.dart\n    │   │   │   │   └── state\n    │   │   │   │       ├── contact_state.dart\n    │   │   │   ├── domain\n    │   │   │   │   ├── provider\n    │   │   │   │   │   └── contact_provider.dart\n    │   │   │   │   └── repository\n    │   │   │   │       ├── contact_repository_impl.dart\n    │   │   │   │       └── contact_repository.dart\n    │   │   │   └── presentation\n    │   │   │       ├── screen\n    │   │   │       │   ├── create_screen.dart\n    │   │   │       │   ├── detail_screen.dart\n    │   │   │       │   ├── edit_screen.dart\n    │   │   │       │   └── list_screen.dart\n    │   │   │       └── widget\n\n\n## Features\n\n- Add, Edit and Remove Contact\n- Rest API from Strapi\n- Offline database\n- Script manager with derry\n- Clean Architecture\n\n\n## Banner Design\n\n\u003cdiv\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/iniakunhuda/flutter_riverpod_strapi/main/preview/preview_1.png\" alt=\"feed example\" width=\"200\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/iniakunhuda/flutter_riverpod_strapi/main/preview/preview_2.png\" alt=\"feed example\" width=\"200\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/iniakunhuda/flutter_riverpod_strapi/main/preview/preview_3.png\" alt=\"feed example\" width=\"200\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/iniakunhuda/flutter_riverpod_strapi/main/preview/preview_4.png\" alt=\"feed example\" width=\"200\"\u003e\n\u003c/div\u003e\n\n\n## Built With 🛠\n\n* [Clean Architecture](https://medium.com/ruangguru/an-introduction-to-flutter-clean-architecture-ae00154001b0) - The blueprint for a modular system, which strictly follows the design principle called separation of concerns.\n* [Dartz](https://pub.dev/packages/dartz) - Functional Programming in Dart\n* [Derry](https://pub.dev/packages/derry) - A script manager to help you define script shortcuts and use them effortlessly\n* [Dio](https://github.com/flutterchina/dio/) - A type-safe HTTP client.\n* [Freezed](https://pub.dev/packages/freezed) - Code generation for immutable classes\n* [Go Router](https://pub.dev/packages/go_router) - Route management Flutter\n* [Isar Database](https://isar.dev/) - Local Database\n* [Riverpod](https://riverpod.dev/) - State management with upgrade from provider\n* [Strapi API](https://strapi.io/) - Handle rest api from Headless CMS\n* Handle State - (Loading, No Data, Has Data, Error)\n\n## Author\n\n* **Miftahul Huda**\n\nDon't forget to follow me, fork and give me a ⭐\n\n\n## How to run app\n\nInstall package\n```\nflutter pub get\n```\n\nRun in terminal to generate freezed file\n```\nderry build\n```\n\nCopy .env.example to .env and fill credential from Strapi\n```\n// assets/.env\n\nAPI_KEY_STRAPI=xxx\nAPI_BASE_URL=xxx\n```\n\n\n## Strapi Setup\n\nInstall \u003ca href=\"https://github.com/strapi/strapi\" target=\"_blank\"\u003eStrapi\u003c/a\u003e in your local computer\n\nRun project\n```\nnpm start\n```\n\nCreate collection structure like this\n\n\u003cimg src=\"https://raw.githubusercontent.com/iniakunhuda/flutter_riverpod_strapi/main/preview/strapi.png\" alt=\"feed example\" width=\"100%\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finiakunhuda%2Fflutter_riverpod_strapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finiakunhuda%2Fflutter_riverpod_strapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finiakunhuda%2Fflutter_riverpod_strapi/lists"}